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を宣言しています。