ソースコード表現
ソースコードはUTF-8でエンコードされたUnicodeテキストです。テキストは正規化されていないため、アクセント付きの単一のコードポイントは、アクセントと文字を組み合わせて構成された同じ文字とは区別されます。これらは2つのコードポイントとして扱われます。簡単にするために、このドキュメントではソーステキスト内のUnicodeコードポイントを指す用語として、限定のない文字という用語を使用します。
各コードポイントは区別されます。例えば、大文字と小文字は異なる文字です。
実装上の制限:他のツールとの互換性のために、コンパイラはソーステキスト内のNUL文字(U+0000)を禁止することがあります。
実装上の制限:他のツールとの互換性のために、コンパイラはソーステキストの最初のUnicodeコードポイントがUTF-8エンコードされたバイトオーダーマーク(U+FEFF)である場合、それを無視することがあります。バイトオーダーマークはソースの他の場所では禁止されることがあります。
文字
以下の用語は特定のUnicode文字カテゴリを表すために使用されます:
newline = /* Unicodeコードポイント U+000A */ .
unicode_char = /* 改行を除く任意のUnicodeコードポイント */ .
unicode_letter = /* "Letter"カテゴリに分類されるUnicodeコードポイント */ .
unicode_digit = /* "Number, decimal digit"カテゴリに分類されるUnicodeコードポイント */ .
Unicode標準8.0のセクション4.5「General Category」では、文字カテゴリのセットが定義されています。GoはLetterカテゴリLu、Ll、Lt、Lm、またはLoのすべての文字をUnicode文字として扱い、NumberカテゴリNdの文字をUnicode数字として扱います。
文字と数字
アンダースコア文字 _
(U+005F)は小文字として扱われます。
letter = unicode_letter | "_" .
decimal_digit = "0" … "9" .
binary_digit = "0" | "1" .
octal_digit = "0" … "7" .
hex_digit = "0" … "9" | "A" … "F" | "a" … "f" .