Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 16291] ファイルの概要

このコミットは、Go言語の公式仕様書ドキュメント doc/go_spec.html におけるタイポ(誤字)を修正するものです。具体的には、HTMLエンティティの誤用と、コード例における変数名の誤りを修正しています。

コミット

commit df29cdd33d63c7fe452a32aab193df7f0815f7ef
Author: Shenghou Ma <minux.ma@gmail.com>
Date:   Wed May 15 03:50:27 2013 +0800

    doc/go_spec: fix typos
    Fixes #5456.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/9400044

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/df29cdd33d63c7fe452a32aab193df7f0815f7ef

元コミット内容

このコミットは、Go言語の仕様書ドキュメント doc/go_spec.html 内の以下の箇所を修正しています。

  1. ドキュメントのバージョン日付を「May 8, 2013」から「May 14, 2013」に更新。
  2. コード例におけるHTMLエンティティの誤りを修正。具体的には、<- (チャネル受信演算子) や < (小なり演算子) がHTMLエンティティ &lt;-&lt; として記述されるべき箇所で、直接 <-< と記述されていた部分を修正。
  3. メソッド呼び出しの例において、t.Mv(&t).Mv と同等であるという説明の箇所で、誤って t.Mv と記述されていた部分を t.Mp に修正。これは、おそらく MvMp のタイポであったか、より一般的なプレースホルダーとしての Mp に変更されたものと推測されます。

変更の背景

この変更の背景は、Go言語の公式仕様書ドキュメント doc/go_spec.html に含まれる誤字や表示上の問題を修正することにあります。特に、HTMLドキュメント内で特殊文字(例: <>)を正しく表示するためには、それらをHTMLエンティティ(例: &lt;&gt;)にエスケープする必要があります。エスケープされていない場合、ブラウザがそれらをHTMLタグの一部として解釈し、正しく表示されない可能性があります。

また、コード例における変数名の誤りも、読者の混乱を招く可能性があるため修正されました。コミットメッセージに「Fixes #5456」とあることから、この修正はGoのIssueトラッカーで報告された問題(Issue 5456)に対応するものであることがわかります。

前提知識の解説

このコミットを理解するためには、以下の前提知識が役立ちます。

  • HTMLエンティティ: HTMLドキュメント内で特殊文字(例: <>&"')を表示するために使用される特殊な文字コードです。これらの文字はHTMLの構文の一部として解釈されるため、そのまま記述すると意図しない表示になることがあります。例えば、<&lt; と記述することで「小なり」記号として表示され、HTMLタグの開始と誤解されなくなります。
  • Go言語のチャネル: Go言語におけるチャネルは、ゴルーチン間で値を送受信するための通信メカニズムです。チャネルからの受信は <- 演算子を使用します。
  • Go言語の定数: const キーワードを使用して宣言される不変の値です。型を持たない定数(untyped constant)は、その値が使用される文脈によって型が決定されます。
  • Go言語のメソッドとポインタレシーバ: Go言語では、型にメソッドを定義できます。メソッドのレシーバがポインタ型の場合(例: func (p *MyType) MyMethod() {})、そのメソッドはポインタレシーバメソッドと呼ばれます。値型の変数に対してポインタレシーバメソッドを呼び出す場合、Goは自動的にその変数のアドレスを取得してメソッドに渡します(アドレス可能であれば)。

技術的詳細

このコミットで行われた技術的な修正は以下の通りです。

  1. HTMLエンティティの修正:

    • func findMarker(c <-chan int) int {<-&lt;- に修正されました。これは、HTMLドキュメント内でGoのチャネル受信演算子を正しく表示するための修正です。
    • if x := <-c; isMarker(x) {<- も同様に &lt;- に修正されました。
    • const c = 3 < 4<&lt; に修正されました。これは、HTMLドキュメント内でGoの小なり演算子を正しく表示するための修正です。

    これらの修正により、ブラウザがこれらの記号をHTMLタグの一部としてではなく、単なる文字として解釈し、Goのコード例が正しく表示されるようになります。

  2. コード例の変数名修正:

    • t.Mv(&t).Mv と同等であるという説明の箇所で、t.Mvt.Mp に修正されました。これは、おそらく元のコード例で意図されていたメソッド名が Mp であったか、より一般的なプレースホルダーとして Mp が適切であると判断されたためと考えられます。これにより、ドキュメントの正確性が向上します。
  3. ドキュメントバージョンの更新:

    • Subtitle の日付が「Version of May 8, 2013」から「Version of May 14, 2013」に更新されました。これは、ドキュメントの内容が最新の状態であることを示すための一般的な更新です。

コアとなるコードの変更箇所

--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -1,6 +1,6 @@
 <!--{
 	"Title": "The Go Programming Language Specification",
-	"Subtitle": "Version of May 8, 2013",
+	"Subtitle": "Version of May 14, 2013",
 	"Path": "/ref/spec"
 }-->
 
@@ -1969,9 +1969,9 @@ a <a href=\"#Terminating_statements\">terminating statement</a>.
 </p>
 
 <pre>
-func findMarker(c <-chan int) int {\n+func findMarker(c &lt;-chan int) int {\n \tfor i := range c {\n-\t\tif x := <-c; isMarker(x) {\n+\t\tif x := &lt;-c; isMarker(x) {\n \t\t\treturn x\n \t\t}\n \t}\n@@ -3240,7 +3240,7 @@ is also allowed and follows from the general rules above.\n </p>\n \n <pre>\n-const c = 3 < 4            // c is the untyped bool constant true\n+const c = 3 &lt; 4            // c is the untyped bool constant true\n \n type MyBool bool\n var x, y int\n@@ -3550,7 +3550,7 @@ using a pointer will automatically dereference that pointer: <code>pt.Mv</code>\n \n <p>\n As with <a href=\"#Calls\">method calls</a>, a reference to a non-interface method with a pointer receiver\n-using an addressable value will automatically take the address of that value: <code>t.Mv</code> is equivalent to <code>(&amp;t).Mv</code>.\n+using an addressable value will automatically take the address of that value: <code>t.Mp</code> is equivalent to <code>(&amp;t).Mp</code>.\n </p>\n \n <pre>\n```

## コアとなるコードの解説

上記の差分は、`doc/go_spec.html` ファイルに対する変更を示しています。

*   **行 1-6**: ドキュメントのサブタイトルにある日付が「May 8, 2013」から「May 14, 2013」に更新されています。これはドキュメントのバージョン管理の一環です。
*   **行 1969-1972**: `func findMarker(c <-chan int) int {` と `if x := <-c; isMarker(x) {` の行で、Goのチャネル受信演算子 `<-` がHTMLエンティティ `&lt;-` に修正されています。これにより、ブラウザがこの部分をHTMLタグとして誤って解釈するのを防ぎ、正しく「左矢印とハイフン」として表示されるようになります。
*   **行 3240-3243**: `const c = 3 < 4` の行で、Goの小なり演算子 `<` がHTMLエンティティ `&lt;` に修正されています。これも同様に、ブラウザがHTMLタグの開始と誤解するのを防ぐための修正です。
*   **行 3550-3553**: ポインタレシーバを持つメソッドの呼び出しに関する説明で、`t.Mv` が `(&t).Mv` と同等であるという記述が、`t.Mp` が `(&t).Mp` と同等であるという記述に修正されています。これは、コード例におけるメソッド名のタイポ修正、またはより適切なプレースホルダーへの変更です。

これらの変更は、Go言語の仕様書ドキュメントの正確性と可読性を向上させるための、細かではあるが重要な修正です。

## 関連リンク

*   Go言語の公式仕様書: [https://go.dev/ref/spec](https://go.dev/ref/spec) (このコミットが修正したドキュメントの最新版)
*   GoのIssueトラッカー (Issue 5456): 残念ながら、現在の検索ではGoの公式Issueトラッカーで直接「Issue 5456」を見つけることはできませんでした。しかし、コミットメッセージに「Fixes #5456」と明記されているため、過去に存在したIssueであることは確かです。

## 参考にした情報源リンク

*   GitHubのコミットページ: [https://github.com/golang/go/commit/df29cdd33d63c7fe452a32aab193df7f0815f7ef](https://github.com/golang/go/commit/df29cdd33d63c7fe452a32aab193df7f0815f7ef)
*   Gerrit Code Review (Goプロジェクトのコードレビューシステム): [https://golang.org/cl/9400044](https://golang.org/cl/9400044) (コミットメッセージに記載されている変更リストへのリンク)
*   HTMLエンティティに関する一般的な情報 (例: MDN Web Docs): [https://developer.mozilla.org/ja/docs/Glossary/HTML_entity](https://developer.mozilla.org/ja/docs/Glossary/HTML_entity)