Go/ソースコードの表現方法
ソースコードの表現方法 編集
ソースコードは、UTF-8でエンコードされたUnicodeテキストです。テキストは正規化されていないので、1つのアクセント付きコードポイントは、アクセントと文字を組み合わせて作られた同じ文字とは区別され、それらは2つのコードポイントとして扱われます[1]。『The Go Programming Language Specification』では、簡単のために、原文中のUnicodeコードポイントを参照するために、修飾語ではないcharacterを使用します。
例えば、大文字と小文字は異なる文字です。
実装上の制限。他のツールとの互換性のために、コンパイラーはソース・テキスト中の NUL 文字(NUL character; U+0000)を許可しないことがあります。
実装上の制限。他のツールとの互換性のため、コンパイラーは UTF-8 でエンコードされたバイトオーダーマーク(BOM; U+FEFF)がソース・テキスト内で最初の Unicode コードポイントである場合、それを無視してもかまいません。バイトオーダーマークは、ソース内の他の場所では許可されません。
この様に、ソースコードの文字コードを言語仕様書で明確に規定しているので、それ以外の文字コードを使うことは仕様に反した使用方法です。
UTF-8エンコードに規定されているのはソースコードだけなので、他の文字コードでエンコーディングされたファイルの読み書きは専用のパッケージで定義された関数を使います。
- 日本語
- "golang.org/x/text/encoding/japanese" -- EUCJP, ISO2022JP, ShiftJIS
- 中文繁體
- "golang.org/x/text/encoding/traditionalchinese" -- Big5
- パッケージ "golang.org/x/text/encoding/japanese" のインストール
PowerShell 7.1.4 Copyright (c) Microsoft Corporation. https://aka.ms/powershell Type 'help' to get help. PS C:\Users\eguchi> go get -v golang.org/x/text/encoding/japanese go: downloading golang.org/x/text v0.3.7 golang.org/x/text/encoding/internal/identifier golang.org/x/text/transform golang.org/x/text/encoding golang.org/x/text/encoding/internal golang.org/x/text/encoding/japanese PS C:\Users\eguchi>
- ShiftJISでエンコードされたファイルを(別の)ファイルにEUC-JPエンコーディングで書き出す関数
package conversion import ( "io" "golang.org/x/text/encoding/japanese" "golang.org/x/text/transform" ) //Conversion func Conversion(inStream io.Reader, outStream io.Writer) error { // ストリームからの読み込み(Shift-JIS → UTF-8) transform.NewReader(inStream, japanese.ShiftJIS.NewDecoder()) // ストリームへの書き込み(UTF-8 → EUC-JP) transform.NewWriter(outStream, japanese.EUCJP.NewEncoder()) // コピー if _, err := io.Copy(writer, reader); err != nil { return err } return nil }
文字 編集
以下の用語は、特定のUnicode文字クラスを示すために使用されます。
- 文字
newline = (* UnicodeコードポイントU+000A *) ; unicode_char = (* newline を除く任意の Unicode コードポイント *) ; unicode_letter = (* "Letter "に分類されるUnicodeコードポイント *) ; unicode_digit = (* "Number, decimal digit" に分類される Unicode コードポイント *) ;
The Unicode Standard 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" ;
脚註 編集
- ^ “Source code representation ¶”. The Go Programming Language Specification. The Go website. (Jul 26, 2021) .