Go言語の字句要素
2026/07/28
ソースコードの表現
GoのソースコードはUTF-8でエンコードされたUnicodeテキストです。大文字と小文字は別の文字として扱われます。
コメント
コメントは、行コメント(//から行末まで)とブロックコメント(/*から*/まで)の2種類です。
// 行コメント
/*
ブロックコメント
*/トップレベル宣言の直前に改行なしで置かれたコメントは、その宣言のドキュメントとみなされます。
// Add はaとbの和を返す。
func Add(a, b int) int {
return a + b
}識別子とキーワード
識別子は、変数・関数・型・パッケージなどに付ける名前です。文字で始まり、文字と数字からなります。アンダースコア_は、仕様上「小文字の文字」として扱われます。そのため識別子の先頭にも使え、先頭が_の名前は小文字始まりと同じく他パッケージからは見えません(公開されるのは先頭がUnicodeの大文字のときだけです)。
var _count int // 先頭が_なのでパッケージ外からは見えない
var count int // 先頭が小文字でも同様に見えない
var Count int // 先頭が大文字なら他パッケージから見える次の語はキーワードであり、識別子には使えません。
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return varセミコロンの自動挿入
文法上、Goの文はセミコロンで終わります。字句解析は、コンパイラがソース文字列をifや:=などのトークンに分ける処理です。この段階で次のトークンの直後に改行やEOFがあればセミコロンを補うため、ソースに;を書く必要はほとんどありません。ソースに;を書いた場合もそれはセミコロンのトークンとして読まれ、行末が;の行では自動挿入は走らないため、二重にはなりません。
次のトークンの直後の改行でセミコロンが入ります。
- 識別子、リテラル
break,continue,fallthrough,return++,--,),],}
if条件式の直後で改行すると、行頭の{の前にセミコロンが入ったと解釈されコンパイルエラーになります。制御構文の{は同じ行に書きます。
if x < 0 {
return -x
}if x < 0
{
// コンパイルエラー
}