A Tutorial for the Go Programming Language
とりあえず章の数的に半分まで読みました。その中でちょっとだけ悩んだ箇所をいくつかご紹介。
セミコロン
Goではセミコロンは一行の中にいくつかのステートメントを書くときにのみ必要になります。極端な例で言うとこんな感じ。
var a int = 1; b := 2; c := 3; var d int = 4;
もちろん改行すればセミコロンは不要になります。
var a int = 1 b := 2 c := 3 var d int = 4
「=」と「:=」の違い
たとえば以下の違いがあります。
var a int = 32 b := 32
つまり、型名が付いたちゃんとした (?) 初期化では「=」となり、型名がない省略型の初期化では「:=」となるようです。ちなみにこの「:=」はfor文でよく見かけます。
func sum(a []int) { s := 0 for i := 0; i < 10; i ++ { s += a[i] } return s }
arrayとslice
電車の中で音楽を聞きながら読んでいたので、一向に頭に入ってこなかった箇所です。よくよく考えてみたらとてもシンプルな概念ですね。
arrayとは配列の実体のことです。これに大してsliceはarrayへの参照です。C言語で言うところのポインタでしょうか。たとえば以下のように書くと
var a [3]int = {1, 2, 3}
もちろんaは配列の実体です。これがarray。
b := a[1:3]
このように書くとbは配列aへの参照、つまりsliceということになります。さらにbはaの1番目から最後だけを参照しています。先頭要素は参照していません。この考え方は関数の仮引数にも当てはまります。先に出したsum関数はまさしく仮引数でsliceを宣言しています。