セミコロン

Cと同様に、Goの正式な文法では、ステートメントを終了するためにセミコロンを使用しますが、Cとは異なり、これらのセミコロンはソースに表示されません。代わりに、レクサーは簡単な規則を使用して、スキャンしながら自動的にセミコロンを挿入するため、入力テキストはほとんどそれらから解放されます。

ルールは次のとおりです。改行前の最後のトークンが識別子(intfloat64などの単語を含む)、数値や文字列定数などの基本リテラル、または次のトークンのいずれかである場合:

break continue fallthrough return ++ -- ) }

レクサーは常にトークンの後にセミコロンを挿入します。これは「ステートメントを終了できるトークンの後に改行がある場合、セミコロンを挿入する」と要約できます。

セミコロンは、閉じ括弧の直前でも省略できるため、次のようなステートメント:

go func() { for { dst <- <-src } }()

にはセミコロンは必要ありません。慣用的なGoプログラムは、forループ節でイニシャライザ、条件、継続要素を分離するなど、セミコロンを必要とする場所にのみセミコロンがあります。また、1行に複数のステートメントを分離する場合にも必要です(そのようなコードを書く場合)。

セミコロン挿入ルールの一つの結果として、制御構造(ifforswitchselect)の開始波括弧を次の行に置くことはできません。そうすると、波括弧の前にセミコロンが挿入され、望ましくない効果を引き起こす可能性があります。次のように書いてください:

if i < f() {
    g()
}

このようには書かないでください:

if i < f()  // 間違い!
{           // 間違い!
    g()
}