c k S e r v i c e s t r u c t { } f u n c ( x * M o c k S e r v i c e ) G e t T i m e l i n e ( c o u n t i n t ) ( [ ] S t a t u s , e r r o r ) { r e t u r n m a k e ( [ ] S t a t u s , 0 ) , n i l } f u n c ( t * M o c k S e r v i c e ) T w e e t ( t e x t s t r i n g , i n R e p l y T o i n t ) ( i n t , e r r o r ) { p a n i c ( " " ) } f u n c T e s t A c t i o n ( t * t e s t i n g . T ) { s e r v i c e : = & M o c k S e r v i c e { } b o t : = & T w i t t e r B o t I m p l { s e r v i c e } t l , _ : = b o t . A c t i o n ( 1 0 ) i f l e n ( t l ) ! = 0 { t . E r r o r ( " f a i l " ) } } Go の場合、 どのインター フェー スを実装しているかを明示的に書かない ダックタイピング Structural Subtyping もし Go に匿名インター フェー ス構文があれば次のように書ける s e r v i c e : = & i n t e r f a c e { G e t T i m e l i n e ( c o u n t i n t ) ( [ ] S t a t u s , e r r o r ) { r e t u r n m a k e ( [ ] S t a t u s , 0 ) , n i l } T w e e t ( t e x t s t r i n g , i n R e p l y T o i n t ) ( i n t , e r r o r ) { p a n i c ( " " ) } } 26 / 31