[インデックス 12400] ファイルの概要
このコミットは、Go言語の標準ライブラリunicode/utf8
パッケージが、unicode
パッケージへの依存関係を解消するための変更です。具体的には、unicode
パッケージから2つの定数(unicode.ReplacementChar
とunicode.MaxRune
)をインポートする代わりに、utf8
パッケージ内でこれらの定数をローカルに定義し、テストでその等価性を検証するように修正されています。これにより、utf8
パッケージの独立性が高まり、依存関係が簡素化されます。
コミット
commit d9832987ba95f8feb016fc5d22d77793659b94ef
Author: Rob Pike <r@golang.org>
Date: Tue Mar 6 11:14:45 2012 +1100
unicode/utf8: remove dependence on unicode.
The dependency was there only to pull in two constants.
Now we define them locally and verify equality in the test.
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5754046
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/d9832987ba95f8feb016fc5d22d77793659b94ef
元コミット内容
このコミットの元の内容は以下の通りです。
unicode/utf8: remove dependence on unicode. The dependency was there only to pull in two constants. Now we define them locally and verify equality in the test.
これは、「unicode/utf8
パッケージからunicode
への依存を削除する。この依存は2つの定数を取得するためだけに存在していた。これからはそれらをローカルで定義し、テストで等価性を検証する。」という意味です。
変更の背景
Go言語の標準ライブラリは、モジュール性と独立性を重視して設計されています。unicode/utf8
パッケージはUTF-8エンコーディングの処理に特化しており、その機能のためにunicode
パッケージから特定の定数(unicode.ReplacementChar
とunicode.MaxRune
)をインポートしていました。
しかし、これらの定数はutf8
パッケージのコア機能にとって本質的なものであり、かつその値が固定されているため、外部パッケージに依存する必要性は低いと判断されました。外部パッケージへの不必要な依存は、コンパイル時の依存関係の複雑さを増し、潜在的な循環参照のリスクや、将来的なパッケージ構造変更時の影響範囲を広げる可能性があります。
このコミットの背景には、utf8
パッケージの自己完結性を高め、依存関係グラフを簡素化するという設計思想があります。これにより、utf8
パッケージはより独立して機能し、他のパッケージの変更による影響を受けにくくなります。また、unicode
パッケージの変更がutf8
パッケージに直接影響を与える可能性も低減されます。
前提知識の解説
UTF-8 (Unicode Transformation Format - 8-bit)
UTF-8は、Unicode文字を可変長バイトシーケンスでエンコードするための文字エンコーディング方式です。ASCII互換性があり、1バイトから4バイトでUnicodeコードポイントを表現します。
- ASCII互換性: 0-127の範囲の文字(基本的なラテン文字、数字、記号など)は1バイトで表現され、ASCIIと完全に互換性があります。
- 可変長エンコーディング: 文字によって必要なバイト数が異なります。これにより、使用頻度の高い文字は少ないバイト数で表現され、効率的なストレージと転送が可能です。
- 自己同期性: UTF-8バイトシーケンスは、不正なバイトシーケンスが検出された場合でも、次の有効な文字の開始位置を比較的容易に特定できる特性(自己同期性)を持っています。
Unicode
Unicodeは、世界中のあらゆる文字を統一的に扱うための文字コード標準です。各文字には一意の「コードポイント」が割り当てられます。
- コードポイント (Code Point): Unicodeで文字を識別するための数値です。通常、
U+XXXX
の形式で表記されます(例:U+0041
は'A')。 - Rune (Go言語におけるUnicode文字): Go言語では、
rune
型はUnicodeコードポイントを表すために使用される組み込みのエイリアス型です。これはint32
型と同じです。
unicode
パッケージ (Go言語)
Go言語の標準ライブラリunicode
パッケージは、Unicode文字のプロパティ(カテゴリ、スクリプトなど)や、大文字・小文字変換、正規化などの操作を提供します。
unicode.ReplacementChar
: Unicodeの「置換文字」を表すコードポイントです。通常、U+FFFD
(``) で表現され、不正なバイトシーケンスや変換エラーが発生した場合に、その文字の代わりに表示されます。Go言語ではrune
型で定義されています。unicode.MaxRune
: Unicodeで定義されている最大の有効なコードポイントを表します。これはUU+10FFFF
です。この値を超えるコードポイントは、Unicodeの範囲外と見なされます。
unicode/utf8
パッケージ (Go言語)
Go言語の標準ライブラリunicode/utf8
パッケージは、UTF-8エンコーディングされたバイトシーケンスとrune
(Unicodeコードポイント)間の変換、およびUTF-8シーケンスの検証を行うための機能を提供します。
utf8.RuneError
:unicode.ReplacementChar
と同じ意味を持つ、utf8
パッケージ内で定義されるエラーを表すrune
定数です。utf8.MaxRune
:unicode.MaxRune
と同じ意味を持つ、utf8
パッケージ内で定義される最大の有効なUnicodeコードポイントを表す定数です。
技術的詳細
このコミットの技術的な核心は、Go言語のパッケージ間の依存関係の管理と、定数の定義方法にあります。
Go言語では、パッケージは明確な依存関係を持つべきであり、不必要な依存は避けるべきです。unicode/utf8
パッケージはUTF-8エンコーディングの低レベルな処理を担当しており、その機能はUnicodeの基本的な概念(エラー文字や最大コードポイント)に依存しますが、これらの値自体はunicode
パッケージの複雑なロジックやデータ構造に依存するものではありません。
コミット前のutf8.go
では、unicode.ReplacementChar
とunicode.MaxRune
をインポートして使用していました。これは、これらの定数がunicode
パッケージで既に定義されていたため、再定義を避けるという観点からは合理的でした。しかし、これによりutf8
パッケージはunicode
パッケージ全体に依存することになります。
このコミットでは、この依存関係を解消するために、以下の変更が行われました。
- 定数のローカル定義:
unicode.ReplacementChar
とunicode.MaxRune
と同じ値を持つ定数RuneError
とMaxRune
をutf8.go
内に直接定義しました。RuneError = '\uFFFD'
MaxRune = '\U0010FFFF'
これらの値はUnicode標準で固定されており、変更されることはありません。
- テストでの等価性検証:
utf8_test.go
のinit()
関数内で、新しく定義されたローカル定数MaxRune
とRuneError
が、それぞれunicode.MaxRune
とunicode.ReplacementChar
と等しいことを実行時に検証するアサーションを追加しました。if MaxRune != unicode.MaxRune { panic("utf8.MaxRune is wrong") }
if RuneError != unicode.ReplacementChar { panic("utf8.RuneError is wrong") }
これにより、将来的にunicode
パッケージのこれらの定数の値が誤って変更された場合でも、utf8
パッケージのテストが失敗し、問題が早期に検出されるようになります。これは、依存関係を削除しつつも、値の一貫性を保証するための堅牢なアプローチです。
この変更により、unicode/utf8
パッケージはunicode
パッケージへの直接的なインポートを必要としなくなり、より軽量で独立したパッケージとなりました。これは、Go言語の標準ライブラリ設計におけるモジュール性と依存関係の最小化という原則に合致しています。
コアとなるコードの変更箇所
このコミットによる主要なコード変更は、以下の2つのファイルに集中しています。
src/pkg/unicode/utf8/utf8.go
src/pkg/unicode/utf8/utf8_test.go
src/pkg/unicode/utf8/utf8.go
の変更
--- a/src/pkg/unicode/utf8/utf8.go
+++ b/src/pkg/unicode/utf8/utf8.go
@@ -6,13 +6,16 @@
// UTF-8. It includes functions to translate between runes and UTF-8 byte sequences.
package utf8
-import "unicode" // only needed for a couple of constants
+// The conditions RuneError==unicode.ReplacementChar and
+// MaxRune==unicode.MaxRune are verified in the tests.
+// Defining them locally avoids this package depending on package unicode.
// Numbers fundamental to the encoding.
const (
-\tRuneError = unicode.ReplacementChar // the "error" Rune or "replacement character".
-\tRuneSelf = 0x80 // characters below Runeself are represented as themselves in a single byte.
-\tUTFMax = 4 // maximum number of bytes of a UTF-8 encoded Unicode character.
+\tRuneError = '\uFFFD' // the "error" Rune or "Unicode replacement character"
+\tRuneSelf = 0x80 // characters below Runeself are represented as themselves in a single byte.
+\tMaxRune = '\U0010FFFF' // Maximum valid Unicode code point.
+\tUTFMax = 4 // maximum number of bytes of a UTF-8 encoded Unicode character.
)
const (
@@ -309,7 +312,7 @@ func EncodeRune(p []byte, r rune) int {
\t\treturn 2
\t}\
\n-\tif uint32(r) > unicode.MaxRune {\n+\tif uint32(r) > MaxRune {\n \t\tr = RuneError\n \t}\
\n
src/pkg/unicode/utf8/utf8_test.go
の変更
--- a/src/pkg/unicode/utf8/utf8_test.go
+++ b/src/pkg/unicode/utf8/utf8_test.go
@@ -7,9 +7,20 @@ package utf8_test
import (
\t"bytes"
\t"testing"
+\t"unicode"
\t. "unicode/utf8"
)
\n+// Validate the constants redefined from unicode.
+func init() {
+\tif MaxRune != unicode.MaxRune {
+\t\tpanic("utf8.MaxRune is wrong")
+\t}\
+\tif RuneError != unicode.ReplacementChar {
+\t\tpanic("utf8.RuneError is wrong")
+\t}\
+}\n+\n type Utf8Map struct {
\tr rune
\tstr string
コアとなるコードの解説
src/pkg/unicode/utf8/utf8.go
import "unicode"
の削除: 変更前はimport "unicode" // only needed for a couple of constants
というコメントと共にunicode
パッケージがインポートされていました。このコミットでは、このインポート文が完全に削除されました。これにより、utf8
パッケージはunicode
パッケージへの直接的な依存を失います。- 定数のローカル定義:
const
ブロック内で、RuneError
とMaxRune
の定義が変更されました。RuneError = unicode.ReplacementChar
からRuneError = '\uFFFD'
へ変更。\uFFFD
はUnicodeの置換文字(U+FFFD)を表すGo言語のリテラル表現です。MaxRune
が新しく追加され、MaxRune = '\U0010FFFF'
と定義されました。\U0010FFFF
はUnicodeの最大有効コードポイント(U+10FFFF)を表すGo言語のリテラル表現です。UTFMax
とRuneSelf
は変更されていません。
EncodeRune
関数の変更:EncodeRune
関数内のif uint32(r) > unicode.MaxRune {
という条件式が、新しく定義されたローカル定数MaxRune
を使用するようにif uint32(r) > MaxRune {
と変更されました。これにより、unicode
パッケージへの依存が完全に排除されました。
src/pkg/unicode/utf8/utf8_test.go
import "unicode"
の追加: テストファイルでは、新しく定義されたローカル定数とunicode
パッケージの元の定数を比較するために、import "unicode"
が追加されました。これはテストのための一時的な依存であり、本番コードの依存関係とは異なります。init()
関数の追加: Go言語のinit()
関数は、パッケージが初期化される際に自動的に実行される特殊な関数です。このコミットでは、utf8_test.go
にinit()
関数が追加されました。 このinit()
関数内では、以下の2つのアサーションが行われています。if MaxRune != unicode.MaxRune { panic("utf8.MaxRune is wrong") }
:utf8
パッケージでローカルに定義されたMaxRune
が、unicode
パッケージのMaxRune
と等しくない場合、パニック(プログラムの異常終了)を引き起こします。if RuneError != unicode.ReplacementChar { panic("utf8.RuneError is wrong") }
: 同様に、utf8
パッケージでローカルに定義されたRuneError
が、unicode
パッケージのReplacementChar
と等しくない場合、パニックを引き起こします。 これらのチェックは、utf8
パッケージがunicode
パッケージへの依存を削除した後も、その定数の値がUnicode標準に準拠していることを保証するための重要な安全策です。これにより、将来的にunicode
パッケージの定数が変更されたり、utf8
パッケージのローカル定義が誤って変更されたりした場合に、ビルド時またはテスト実行時に問題が検出されます。
関連リンク
- Go言語の
unicode/utf8
パッケージのドキュメント: https://pkg.go.dev/unicode/utf8 - Go言語の
unicode
パッケージのドキュメント: https://pkg.go.dev/unicode - Unicode Consortium: https://home.unicode.org/
- UTF-8 - Wikipedia: https://ja.wikipedia.org/wiki/UTF-8
参考にした情報源リンク
- Go言語の公式ドキュメント
- Wikipedia (UTF-8, Unicode)
- Go言語のソースコード (特に
src/pkg/unicode/utf8/
とsrc/pkg/unicode/
) - Go言語のコミット履歴とコードレビューコメント (CL 5754046)
[インデックス 12400] ファイルの概要
このコミットは、Go言語の標準ライブラリunicode/utf8
パッケージが、unicode
パッケージへの依存関係を解消するための変更です。具体的には、unicode
パッケージから2つの定数(unicode.ReplacementChar
とunicode.MaxRune
)をインポートする代わりに、utf8
パッケージ内でこれらの定数をローカルに定義し、テストでその等価性を検証するように修正されています。これにより、utf8
パッケージの独立性が高まり、依存関係が簡素化されます。
コミット
commit d9832987ba95f8feb016fc5d22d77793659b94ef
Author: Rob Pike <r@golang.org>
Date: Tue Mar 6 11:14:45 2012 +1100
unicode/utf8: remove dependence on unicode.
The dependency was there only to pull in two constants.
Now we define them locally and verify equality in the test.
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5754046
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/d9832987ba95f8feb016fc5d22d77793659b94ef
元コミット内容
このコミットの元の内容は以下の通りです。
unicode/utf8: remove dependence on unicode. The dependency was there only to pull in two constants. Now we define them locally and verify equality in the test.
これは、「unicode/utf8
パッケージからunicode
への依存を削除する。この依存は2つの定数を取得するためだけに存在していた。これからはそれらをローカルで定義し、テストで等価性を検証する。」という意味です。
変更の背景
Go言語の標準ライブラリは、モジュール性と独立性を重視して設計されています。unicode/utf8
パッケージはUTF-8エンコーディングの処理に特化しており、その機能のためにunicode
パッケージから特定の定数(unicode.ReplacementChar
とunicode.MaxRune
)をインポートしていました。
しかし、これらの定数はutf8
パッケージのコア機能にとって本質的なものであり、かつその値が固定されているため、外部パッケージに依存する必要性は低いと判断されました。外部パッケージへの不必要な依存は、コンパイル時の依存関係の複雑さを増し、潜在的な循環参照のリスクや、将来的なパッケージ構造変更時の影響範囲を広げる可能性があります。
このコミットの背景には、utf8
パッケージの自己完結性を高め、依存関係グラフを簡素化するという設計思想があります。これにより、utf8
パッケージはより独立して機能し、他のパッケージの変更による影響を受けにくくなります。また、unicode
パッケージの変更がutf8
パッケージに直接影響を与える可能性も低減されます。
前提知識の解説
UTF-8 (Unicode Transformation Format - 8-bit)
UTF-8は、Unicode文字を可変長バイトシーケンスでエンコードするための文字エンコーディング方式です。ASCII互換性があり、1バイトから4バイトでUnicodeコードポイントを表現します。
- ASCII互換性: 0-127の範囲の文字(基本的なラテン文字、数字、記号など)は1バイトで表現され、ASCIIと完全に互換性があります。
- 可変長エンコーディング: 文字によって必要なバイト数が異なります。これにより、使用頻度の高い文字は少ないバイト数で表現され、効率的なストレージと転送が可能です。
- 自己同期性: UTF-8バイトシーケンスは、不正なバイトシーケンスが検出された場合でも、次の有効な文字の開始位置を比較的容易に特定できる特性(自己同期性)を持っています。
Unicode
Unicodeは、世界中のあらゆる文字を統一的に扱うための文字コード標準です。各文字には一意の「コードポイント」が割り当てられます。
- コードポイント (Code Point): Unicodeで文字を識別するための数値です。通常、
U+XXXX
の形式で表記されます(例:U+0041
は'A')。 - Rune (Go言語におけるUnicode文字): Go言語では、
rune
型はUnicodeコードポイントを表すために使用される組み込みのエイリアス型です。これはint32
型と同じです。
unicode
パッケージ (Go言語)
Go言語の標準ライブラリunicode
パッケージは、Unicode文字のプロパティ(カテゴリ、スクリプトなど)や、大文字・小文字変換、正規化などの操作を提供します。
unicode.ReplacementChar
: Unicodeの「置換文字」を表すコードポイントです。通常、U+FFFD
(``) で表現され、不正なバイトシーケンスや変換エラーが発生した場合に、その文字の代わりに表示されます。Go言語ではrune
型で定義されています。unicode.MaxRune
: Unicodeで定義されている最大の有効なコードポイントを表します。これはU+10FFFF
です。この値を超えるコードポイントは、Unicodeの範囲外と見なされます。
unicode/utf8
パッケージ (Go言語)
Go言語の標準ライブラリunicode/utf8
パッケージは、UTF-8エンコーディングされたバイトシーケンスとrune
(Unicodeコードポイント)間の変換、およびUTF-8シーケンスの検証を行うための機能を提供します。
utf8.RuneError
:unicode.ReplacementChar
と同じ意味を持つ、utf8
パッケージ内で定義されるエラーを表すrune
定数です。utf8.MaxRune
:unicode.MaxRune
と同じ意味を持つ、utf8
パッケージ内で定義される最大の有効なUnicodeコードポイントを表す定数です。
技術的詳細
このコミットの技術的な核心は、Go言語のパッケージ間の依存関係の管理と、定数の定義方法にあります。
Go言語では、パッケージは明確な依存関係を持つべきであり、不必要な依存は避けるべきです。unicode/utf8
パッケージはUTF-8エンコーディングの低レベルな処理を担当しており、その機能はUnicodeの基本的な概念(エラー文字や最大コードポイント)に依存しますが、これらの値自体はunicode
パッケージの複雑なロジックやデータ構造に依存するものではありません。
コミット前のutf8.go
では、unicode.ReplacementChar
とunicode.MaxRune
をインポートして使用していました。これは、これらの定数がunicode
パッケージで既に定義されていたため、再定義を避けるという観点からは合理的でした。しかし、これによりutf8
パッケージはunicode
パッケージ全体に依存することになります。
このコミットでは、この依存関係を解消するために、以下の変更が行われました。
- 定数のローカル定義:
unicode.ReplacementChar
とunicode.MaxRune
と同じ値を持つ定数RuneError
とMaxRune
をutf8.go
内に直接定義しました。RuneError = '\uFFFD'
MaxRune = '\U0010FFFF'
これらの値はUnicode標準で固定されており、変更されることはありません。
- テストでの等価性検証:
utf8_test.go
のinit()
関数内で、新しく定義されたローカル定数MaxRune
とRuneError
が、それぞれunicode.MaxRune
とunicode.ReplacementChar
と等しいことを実行時に検証するアサーションを追加しました。if MaxRune != unicode.MaxRune { panic("utf8.MaxRune is wrong") }
if RuneError != unicode.ReplacementChar { panic("utf8.RuneError is wrong") }
これにより、将来的にunicode
パッケージのこれらの定数の値が誤って変更された場合でも、utf8
パッケージのテストが失敗し、問題が早期に検出されるようになります。これは、依存関係を削除しつつも、値の一貫性を保証するための堅牢なアプローチです。
この変更により、unicode/utf8
パッケージはunicode
パッケージへの直接的なインポートを必要としなくなり、より軽量で独立したパッケージとなりました。これは、Go言語の標準ライブラリ設計におけるモジュール性と依存関係の最小化という原則に合致しています。
コアとなるコードの変更箇所
このコミットによる主要なコード変更は、以下の2つのファイルに集中しています。
src/pkg/unicode/utf8/utf8.go
src/pkg/unicode/utf8/utf8_test.go
src/pkg/unicode/utf8/utf8.go
の変更
--- a/src/pkg/unicode/utf8/utf8.go
+++ b/src/pkg/unicode/utf8/utf8.go
@@ -6,13 +6,16 @@
// UTF-8. It includes functions to translate between runes and UTF-8 byte sequences.
package utf8
-import "unicode" // only needed for a couple of constants
+// The conditions RuneError==unicode.ReplacementChar and
+// MaxRune==unicode.MaxRune are verified in the tests.
+// Defining them locally avoids this package depending on package unicode.
// Numbers fundamental to the encoding.
const (
-\tRuneError = unicode.ReplacementChar // the "error" Rune or "replacement character".
-\tRuneSelf = 0x80 // characters below Runeself are represented as themselves in a single byte.
-\tUTFMax = 4 // maximum number of bytes of a UTF-8 encoded Unicode character.
+\tRuneError = '\uFFFD' // the "error" Rune or "Unicode replacement character"
+\tRuneSelf = 0x80 // characters below Runeself are represented as themselves in a single byte.
+\tMaxRune = '\U0010FFFF' // Maximum valid Unicode code point.
+\tUTFMax = 4 // maximum number of bytes of a UTF-8 encoded Unicode character.
)
const (
@@ -309,7 +312,7 @@ func EncodeRune(p []byte, r rune) int {
\t\treturn 2
\t}\
\n-\tif uint32(r) > unicode.MaxRune {\n+\tif uint32(r) > MaxRune {\n \t\tr = RuneError\n \t}\
\n
src/pkg/unicode/utf8/utf8_test.go
の変更
--- a/src/pkg/unicode/utf8/utf8_test.go
+++ b/src/pkg/unicode/utf8/utf8_test.go
@@ -7,9 +7,20 @@ package utf8_test
import (
\t"bytes"
\t"testing"
+\t"unicode"
\t. "unicode/utf8"
)
\n+// Validate the constants redefined from unicode.
+func init() {
+\tif MaxRune != unicode.MaxRune {
+\t\tpanic("utf8.MaxRune is wrong")
+\t}\
+\tif RuneError != unicode.ReplacementChar {
+\t\tpanic("utf8.RuneError is wrong")
+\t}\
+}\n+\n type Utf8Map struct {
\tr rune
\tstr string
コアとなるコードの解説
src/pkg/unicode/utf8/utf8.go
import "unicode"
の削除: 変更前はimport "unicode" // only needed for a couple of constants
というコメントと共にunicode
パッケージがインポートされていました。このコミットでは、このインポート文が完全に削除されました。これにより、utf8
パッケージはunicode
パッケージへの直接的な依存を失います。- 定数のローカル定義:
const
ブロック内で、RuneError
とMaxRune
の定義が変更されました。RuneError = unicode.ReplacementChar
からRuneError = '\uFFFD'
へ変更。\uFFFD
はUnicodeの置換文字(U+FFFD)を表すGo言語のリテラル表現です。MaxRune
が新しく追加され、MaxRune = '\U0010FFFF'
と定義されました。\U0010FFFF
はUnicodeの最大有効コードポイント(U+10FFFF)を表すGo言語のリテラル表現です。UTFMax
とRuneSelf
は変更されていません。
EncodeRune
関数の変更:EncodeRune
関数内のif uint32(r) > unicode.MaxRune {
という条件式が、新しく定義されたローカル定数MaxRune
を使用するようにif uint32(r) > MaxRune {
と変更されました。これにより、unicode
パッケージへの依存が完全に排除されました。
src/pkg/unicode/utf8/utf8_test.go
import "unicode"
の追加: テストファイルでは、新しく定義されたローカル定数とunicode
パッケージの元の定数を比較するために、import "unicode"
が追加されました。これはテストのための一時的な依存であり、本番コードの依存関係とは異なります。init()
関数の追加: Go言語のinit()
関数は、パッケージが初期化される際に自動的に実行される特殊な関数です。このコミットでは、utf8_test.go
にinit()
関数が追加されました。 このinit()
関数内では、以下の2つのアサーションが行われています。if MaxRune != unicode.MaxRune { panic("utf8.MaxRune is wrong") }
:utf8
パッケージでローカルに定義されたMaxRune
が、unicode
パッケージのMaxRune
と等しくない場合、パニック(プログラムの異常終了)を引き起こします。if RuneError != unicode.ReplacementChar { panic("utf8.RuneError is wrong") }
: 同様に、utf8
パッケージでローカルに定義されたRuneError
が、unicode
パッケージのReplacementChar
と等しくない場合、パニックを引き起こします。 これらのチェックは、utf8
パッケージがunicode
パッケージへの依存を削除した後も、その定数の値がUnicode標準に準拠していることを保証するための重要な安全策です。これにより、将来的にunicode
パッケージの定数が変更されたり、utf8
パッケージのローカル定義が誤って変更されたりした場合に、ビルド時またはテスト実行時に問題が検出されます。
関連リンク
- Go言語の
unicode/utf8
パッケージのドキュメント: https://pkg.go.dev/unicode/utf8 - Go言語の
unicode
パッケージのドキュメント: https://pkg.go.dev/unicode - Unicode Consortium: https://home.unicode.org/
- UTF-8 - Wikipedia: https://ja.wikipedia.org/wiki/UTF-8
参考にした情報源リンク
- Go言語の公式ドキュメント
- Wikipedia (UTF-8, Unicode)
- Go言語のソースコード (特に
src/pkg/unicode/utf8/
とsrc/pkg/unicode/
) - Go言語のコミット履歴とコードレビューコメント (CL 5754046)