k a g e m a i n / / 利用するパッケー ジ名 i m p o r t " f m t " / / m a i n パッケー ジのm a i n 関数からプログラムが実行される f u n c m a i n ( ) { f m t . P r i n t l n ( " H e l l o , 世界" ) } 実行 $ g o r u n h e l l o w o r l d . g o > H e l l o , 世界 16
m a i n i m p o r t " f m t " f u n c m a i n ( ) { f m t . P r i n t l n ( " H e l l o , 世界" ) } JavaScript ( f u n c t i o n ( m a i n , w i n ) { m a i n . m a i n = f u n c t i o n ( ) { w i n . a l e r t ( " H e l l o , 世界" ) ; } ; } ( m a i n | m a i n = { } , w i n d o w ) ) ; 17
" " / / 初期値から型が推測される v a r s s t r i n g / / 型のゼロ値が設定される / / 以下のようにも書ける v a r s = " " v a r s s t r i n g = " " JavaScript l e t s = " " ; / / E S 6 v a r s = " " ; / / 関数ブロックスコー プ 18
" あ" , " い" } f o r i : = 0 ; i < l e n ( s t r s ) ; i + + { / / . . . } JavaScript v a r s t r s = [ " あ" , " い" ] ; f o r ( v a r i = 0 ; i < s t r s . l e n g t h ; i + + ) { / / . . . } 20
" あ" , " い" } f o r i , s : = r a n g e s t r s { / / . . . } JavaScript v a r s t r s = [ " あ" , " い" ] ; s t r s . f o r E a c h ( f u n c t i o n ( s , i ) { / / . . . } ) ; 21
n t < 1 0 { / / . . . } / / 無限ルー プ f o r { / / . . . } JavaScript w h i l e ( c o u n t < 1 0 ) { / / . . . } / / 無限ルー プ w h i l e ( t r u e ) { / / . . . } 22
i n t { 1 , 2 , 3 } / / 配列( 長さが固定) b : = [ ] i n t { 0 , 1 , 2 , 3 , 4 , 5 } / / スライス( 長さが可変) c : = m a p [ s t r i n g ] i n t { / / 文字列からi n t へのマップ " a " : 1 , " b " : 2 , } JavaScript v a r a = [ 1 , 2 , 3 ] ; / / ※ 長さが固定はない v a r b = [ 1 , 2 , 3 , 4 , 5 ] ; v a r c = { / / マップをオブジェクトで表現 " a " : 1 , " b " : 2 } ; 27
E m p l o y e e s t r u c t { I D i n t N a m e s t r i n g } / / 構造体変数の宣言 a l i c e : = E m p l o y e e { 0 , " a l i c e " } JavaScript / / 構造体をオブジェクトで表現 v a r a l i c e = { I D : 0 , N a m e : " a l i c e " } ; 28
y p o t ( x , y f l o a t 6 4 ) f l o a t 6 4 { r e t u r n m a t h . S q r t ( x * x , y * y ) } f m t . P r i n t l n ( h y p o t ( 3 , 4 ) ) / / " 5 " JavaScript f u n c t i o n h y p o t ( x , y ) { r e t u r n m a t h . S q r t ( x * x , y * y ) ; } c o n s o l e . l o g ( h y p o t ( 3 , 4 ) ) ; / / " 5 " 29
( v a l s . . . i n t ) i n t { t o t a l : = 0 f o r _ , v a l : = r a n g e v a l s { t o t a l + = v a l } r e t u r n t o t a l } JavaScript / / 可変個引数はE S 6 のみ f u n c t i o n s u m ( . . . v a l s ) { v a r t o t a l = 0 v a l s . f o r E a c h ( f u n c t i o n ( v a l , i ) { t o t a l + = v a l ; } ) ; r e t u r n t o t a l ; } 30
o o k u p ( k e y s t r i n g ) i n t { m u . L o c k ( ) / / l o o k u p 関数が完了する直前に呼ばれる d e f e r m u . U n l o c k ( ) / / . . . r e t u r n m [ k e y ] } Javascript なし 31
p , e r r : = h t m l . p a r s e ( t e x t ) i f e r r ! = n i l { r e t u r n e r r } JavaScript try で複数の関数のエラー をまとめて扱えるため、 エラー と関数の 関連がわかりにくい。 t r y { p a r s e H t m l ( t e x t ) ; p a r s e J s o n ( j s o n ) ; } c a t c h ( e r r ) { t h r o w e r r ; } 32
t s t r u c t { X , Y f l o a t 6 4 } f u n c ( p * P o i n t ) S c a l e B y ( f a c t o r f l o a t 6 4 ) { p . X * = f a c t o r p . Y * = f a c t o r } JavaScript f u n c t i o n P o i n t ( x , y ) { t h i s . X = x ; t h i s . Y = y ; } P o i n t . p r o t o t y p e . S c a l e B y = f u n c t i o n ( f a c t o r ) { t h i s . X * = f a c t o r ; t h i s . Y * = f a c t o r ; } ; 35
{ 1 , 2 } / / 初期化 p . S c a l e B y ( 1 0 ) / / X = 1 0 , Y = 2 0 JavaScript v a r p = n e w P o i n t ( 1 , 2 ) ; / / 初期化 p . S c a l e B y ( 1 0 ) ; / / X = 1 0 , Y = 2 0 36
t y p e G e t t e r i n t e r f a c e { G e t T e x t ( ) s t r i n g } t y p e T e x t s t r u c t { t e x t s t r i n g } f u n c ( t T e x t ) G e t T e x t ( ) s t r i n g { r e t u r n t . t e x t } / / T e x t 型はG e t t e r 型の変数に代入できる v a r g e t t e r G e t t e r g e t t e r = T e x t { " t e s t " } f m t . P r i n t l n ( g e t t e r . G e t T e x t ( ) ) / / " t e s t " 37
main 関数を呼び出すゴルー チンを メインゴルー チン といいます。 HTTP Server / / メインゴルー チンがm a i n 関数を呼び出す f u n c m a i n ( ) { l , _ : = n e t . L i s t e n ( " t c p " , " l o c a l h o s t : 8 0 0 0 " ) f o r { / / クライアントの接続要求を待つ c o n n , _ : = l . A c c e p t ( ) / / メインゴルー チンが新たなゴルー チンを生成する g o h a n d l e C o n n ( c o n n ) } } f u n c h a n d l e C o n n ( c n e t . C o n n ) { / / 接続ごとの処理を行う. . . } 39
u n c m a i n ( ) { / / i n t 型のチャネルを作成する c h : = m a k e ( c h a n i n t ) / / 生成されたゴルー チンはチャネルに値を送信し続ける g o f u n c ( ) { f o r x : = 0 ; ; x + + { c h < - x } } ( ) / / メインゴルー チンはチャネルの値を受信し、 出力し続ける f o r { f m t . P r i n t f ( < - c h ) / / 0 1 2 3 4 5 6 . . . } } 40
g o d o c t i m e > p a c k a g e t i m e / / i m p o r t " t i m e " > > P a c k a g e t i m e p r o v i d e s f u n c t i o n a l i t y f o r m e a s u r i n g a n d d i s p l a y > > T h e c a l e n d r i c a l c a l c u l a t i o n s a l w a y s a s s u m e a G r e g o r i a n c a l e n d > > c o n s t A N S I C = " M o n J a n _ 2 1 5 : 0 4 : 0 5 2 0 0 6 " . . . > c o n s t N a n o s e c o n d D u r a t i o n = 1 . . . > . . . 43
a i n i m p o r t " f m t " f u n c m a i n ( ) { f m t . P r i n t l n ( " H e l l o , 世界" ) ; } ↓ ↓ $ g o f m t m a i n . g o ↓ 整形 ↓ p a c k a g e m a i n i m p o r t " f m t " f u n c m a i n ( ) { f m t . P r i n t l n ( " H e l l o , 世界" ) } 46
r d / / テストに使用するパッケー ジ i m p o r t " t e s t i n g " / / T e s t . . . から始める f u n c T e s t I s P a l i n d r o m e ( t * t e s t i n g . T ) { / / 回文チェックの関数 i f ! I s P a l i n d r o m e ( " k a y a k " ) { / / エラー 報告 t . E r r o r ( ` I s P a l i n d r o m e ( " k a y a k " ) = f a l s e ` ) } } 実行結果 $ g o t e s t > P A S S > o k g o p l . i o / c h 1 1 / w o r d 2 2 . 4 3 0 s 合計の処理時間:2.430 秒 47
h m a r k I s P a l i n d r o m e ( b * t e s t i n g . B ) { f o r i : = 0 ; i < b . N ; i + + { I s P a l i n d r o m e ( " k a y a k " ) } } 実行結果 $ g o t e s t - b e n c h = . > B e n c h m a r k I s P a l i n d r o m e - 4 3 0 0 0 0 0 0 6 0 5 n s / o p > P A S S > o k g o p l . i o / c h 1 1 / w o r d 2 2 . 4 3 0 s 使用するコア数:4( 設定可能) 実行回数:300,000( 処理時間が安定する回数が推定される) 個々 の処理時間:605 ナノ秒 合計の処理時間:2.430 秒 48