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

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

このコミットは、Go言語の公式ドキュメントの一部である doc/effective_go.html ファイルに対する変更です。Effective Go は、Go言語を効果的に記述するためのガイドラインやベストプラクティスをまとめた公式ドキュメントであり、Goプログラマーにとって非常に重要なリソースです。このコミットは、そのHTMLドキュメント内のいくつかのHTMLタグの閉じ忘れを修正し、余分なスペースを削除することで、ドキュメントの整形と正確性を向上させています。

コミット

commit e93891f348a8cd74272c106045a2e64cc0543ab
Author: Oling Cat <olingcat@gmail.com>
Date:   Tue Sep 18 08:50:24 2012 -0700

    doc/effective_go: Closed some tags; removed extra spaces.
    
    R=golang-dev, adg
    CC=golang-dev
    https://golang.org/cl/6488122

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

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

元コミット内容

doc/effective_go: Closed some tags; removed extra spaces.

このコミットメッセージは、doc/effective_go.html ファイルに対して、いくつかのHTMLタグを閉じ、余分なスペースを削除したことを示しています。これは主にドキュメントのクリーンアップとHTMLの構文的な正確性の向上を目的とした変更です。

変更の背景

この変更の背景には、Effective Go ドキュメントの品質とメンテナンスの向上が挙げられます。HTMLドキュメントでは、タグの閉じ忘れや余分なスペースは、レンダリングの問題を引き起こしたり、コードの可読性を低下させたりする可能性があります。特に、公式ドキュメントのような広範に利用されるリソースにおいては、その正確性と整合性が非常に重要です。

このコミットは、以下のような具体的な問題に対処しています。

  1. HTMLタグの閉じ忘れ: HTMLでは、多くのタグが開始タグと終了タグのペアで構成されます(例: <p></p>)。終了タグが欠落していると、ブラウザがドキュメントを正しく解釈できず、意図しない表示崩れやレイアウトの問題が発生する可能性があります。このコミットは、特に <p> タグの閉じ忘れを修正しています。
  2. 余分なスペースの削除: コードやドキュメント内の余分なスペース(特に末尾のスペース)は、視覚的なノイズとなり、場合によっては差分ツールでの比較を困難にすることがあります。また、一部のツールやリンターでは、このような余分なスペースを警告またはエラーとして扱うことがあります。このコミットは、主に <pre> タグ内のコードブロックの末尾にある余分なスペースを削除しています。

これらの修正は、ドキュメントのレンダリングの一貫性を保ち、将来的なメンテナンスを容易にし、全体的な品質を向上させるためのものです。

前提知識の解説

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

  • HTML (HyperText Markup Language): ウェブページの構造を定義するためのマークアップ言語です。要素はタグ(例: <p>, <div>, <pre>) で囲まれ、多くの場合、開始タグと終了タグのペアで構成されます。
    • <p> タグ: 段落 (paragraph) を定義するために使用されます。テキストのブロックを形成します。
    • <pre> タグ: 整形済みテキスト (preformatted text) を定義するために使用されます。このタグ内のテキストは、通常、等幅フォントで表示され、空白や改行がそのまま保持されます。コードブロックの表示によく使用されます。
  • Go言語: Googleによって開発されたオープンソースのプログラミング言語です。シンプルさ、効率性、並行処理のサポートが特徴です。
  • Effective Go: Go言語の公式ドキュメントの一部であり、Go言語を効果的に、慣用的に、そして効率的に記述するためのガイドラインとベストプラクティスを提供します。Goプログラマーがより良いコードを書くための指針となる重要なリソースです。
  • Git: バージョン管理システムの一つで、ファイルの変更履歴を記録し、複数の開発者間での共同作業を容易にします。
    • コミット (Commit): Gitにおける変更の単位です。一連の変更をまとめてリポジトリに記録します。
    • 差分 (Diff): 2つのファイルまたはバージョンの間の変更点を示すものです。このコミットの差分は、doc/effective_go.html ファイルの具体的な変更内容を示しています。

技術的詳細

このコミットの技術的な詳細は、doc/effective_go.html ファイルに対するHTMLの構文修正に集約されます。

具体的には、以下の2種類の修正が行われています。

  1. </p> タグの追加:

    • HTMLの <p> (paragraph) タグは、通常、テキストのブロックを囲むために使用されます。このコミットでは、いくつかの箇所で <pre> タグの直前または直後に、対応する </p> 終了タグが欠落している部分にこれらが追加されています。
    • 例:
      @@ -714,6 +714,7 @@ func unhex(c byte) byte {
       <p>
       There is no automatic fall through, but cases can be presented
       in comma-separated lists.
      +</p>
       <pre>
       func shouldEscape(c byte) bool {
           switch c {
      
      この例では、in comma-separated lists. の後に </p> が追加され、その後の <pre> タグで始まるコードブロックとの間に適切な段落の区切りが設けられています。これにより、HTMLの構造がより正確になり、ブラウザによるレンダリングが意図通りに行われるようになります。
  2. 末尾のスペースの削除:

    • <pre> タグで囲まれたコードブロックの行末に存在する余分なスペースが削除されています。これは、視覚的にはほとんど影響を与えませんが、コードのクリーンアップと、将来的なツールによる処理(例: リンター、フォーマッター)との整合性を保つ上で重要です。
    • 例:
      @@ -2378,10 +2389,11 @@ exits, silently.  (The effect is similar to the Unix shell\'s
       background.)
       </p>
       <pre>
      -go list.Sort()  // run list.Sort concurrently; don\'t wait for it. 
      +go list.Sort()  // run list.Sort concurrently; don\'t wait for it.
       </pre>
       <p>
       A function literal can be handy in a goroutine invocation.
      
      この例では、// run list.Sort concurrently; don\'t wait for it. の行末にあったスペースが削除されています。同様に、チャネルのシグナル送信に関するコメント行 c <- 1 // Send a signal; value does not matter. の末尾のスペースも削除されています。

これらの変更は、HTMLの構文規則に厳密に従い、ドキュメントの整合性を高めるための保守的な修正です。

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

変更はすべて doc/effective_go.html ファイル内で行われています。

具体的には、以下の行が変更されています(差分から抜粋):

--- a/doc/effective_go.html
+++ b/doc/effective_go.html
@@ -714,6 +714,7 @@ func unhex(c byte) byte {
 <p>
 There is no automatic fall through, but cases can be presented
 in comma-separated lists.
+</p>
 <pre>
 func shouldEscape(c byte) bool {
     switch c {
@@ -727,6 +728,7 @@ func shouldEscape(c byte) bool {
 <p>
 Here's a comparison routine for byte arrays that uses two
 <code>switch</code> statements:
+</p>
 <pre>
 // Compare returns an integer comparing the two byte arrays,
 // lexicographically.
@@ -1180,6 +1182,7 @@ structure with length 10 and a capacity of 100 pointing at the first
 for more information.)
 In contrast, <code>new([]int)</code> returns a pointer to a newly allocated, zeroed slice
 structure, that is, a pointer to a <code>nil</code> slice value.
+</p>
 
 <p>
 These examples illustrate the difference between <code>new</code> and
@@ -1330,6 +1333,8 @@ func Append(slice, data[]byte) []byte {
 We must return the slice afterwards because, although <code>Append</code>
 can modify the elements of <code>slice</code>, the slice itself (the run-time data
 structure holding the pointer, length, and capacity) is passed by value.
+</p>
+\n
 <p>
 The idea of appending to a slice is so useful it's captured by the
 <code>append</code> built-in function.  To understand that function's
@@ -1545,6 +1550,7 @@ a space in the format (<code>%&nbsp;x</code>) it puts spaces between the bytes.
 </p>
 <p>
 Another handy format is <code>%T</code>, which prints the <em>type</em> of a value.
+</p>
 <pre>
 fmt.Printf(&quot;%T\n&quot;, timeZone)
 </pre>
@@ -1606,6 +1612,7 @@ func Println(v ...interface{}) {
 We write <code>...</code> after <code>v</code> in the nested call to <code>Sprintln</code> to tell the
 compiler to treat <code>v</code> as a list of arguments; otherwise it would just pass
 <code>v</code> as a single slice argument.
+</p>
 <p>
 There's even more to printing than we've covered here.  See the <code>godoc</code> documentation
 for package <code>fmt</code> for the details.
@@ -1783,6 +1790,7 @@ func init() {
 <p>
 Methods can be defined for any named type that is not a pointer or an interface;
 the receiver does not have to be a struct.
+</p>
 <p>
 In the discussion of slices above, we wrote an <code>Append</code>
 function.  We can define it as a method on slices instead.  To do
@@ -2012,6 +2020,7 @@ Those methods include the standard <code>Write</code> method, so an
 can be used.
 <code>Request</code> is a struct containing a parsed representation
 of the request from the client.
+</p>
 <p>
 For brevity, let's ignore POSTs and assume HTTP requests are always
 GETs; that simplification does not affect the way the handlers are
@@ -2034,6 +2043,7 @@ func (ctr *Counter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 (Keeping with our theme, note how <code>Fprintf</code> can print to an
 <code>http.ResponseWriter</code>.)
 For reference, here's how to attach such a server to a node on the URL tree.
+</p>
 <pre>
 import &quot;net/http&quot;
 ...
@@ -2187,6 +2197,7 @@ what a <code>Reader</code> does <em>and</em> what a <code>Writer</code>
 does; it is a union of the embedded interfaces (which must be disjoint
 sets of methods).
 Only interfaces can be embedded within interfaces.
+</p>
 <p>
 The same basic idea applies to structs, but with more far-reaching
 implications.  The <code>bufio</code> package has two struct types,
@@ -2378,10 +2389,11 @@ exits, silently.  (The effect is similar to the Unix shell\'s
 background.)
 </p>
 <pre>
-go list.Sort()  // run list.Sort concurrently; don\'t wait for it. 
+go list.Sort()  // run list.Sort concurrently; don\'t wait for it.
 </pre>
 <p>
 A function literal can be handy in a goroutine invocation.
+</p>
 <pre>
 func Announce(message string, delay time.Duration) {
     go func() {
@@ -2393,6 +2405,7 @@ func Announce(message string, delay time.Duration) {
 <p>
 In Go, function literals are closures: the implementation makes
 sure the variables referred to by the function survive as long as they are active.
+</p>
 <p>
 These examples aren't too practical because the functions have no way of signaling
 completion.  For that, we need channels.
@@ -2425,7 +2438,7 @@ c := make(chan int)  // Allocate a channel.\n // Start the sort in a goroutine; when it completes, signal on the channel.\n go func() {\n     list.Sort()\n-    c &lt;- 1  // Send a signal; value does not matter. \n+c &lt;- 1  // Send a signal; value does not matter.\n }()\n doSomethingForAWhile()\n &lt;-c   // Wait for sort to finish; discard sent value.\n@@ -2494,6 +2507,7 @@ One of the most important properties of Go is that\n a channel is a first-class value that can be allocated and passed\n around like any other.  A common use of this property is\n to implement safe, parallel demultiplexing.\n+</p>\n <p>\n In the example in the previous section, <code>handle</code> was\n an idealized handler for a request but we didn't define the\n@@ -3026,7 +3040,7 @@ TODO\n <pre>\n verifying implementation\n type Color uint32\n-    \n+\n // Check that Color implements image.Color and image.Image\n var _ image.Color = Black\n var _ image.Image = Black

コアとなるコードの解説

このコミットにおける「コアとなるコード」は、Go言語のソースコードそのものではなく、Go言語の公式ドキュメントである Effective Go のHTMLマークアップです。変更の目的は、このHTMLドキュメントの構文的な正確性と整形を改善することにあります。

具体的に行われた修正は以下の通りです。

  1. </p> タグの追加:

    • HTMLの段落タグ <p> は、通常、対応する終了タグ </p> を持ちます。このコミットでは、いくつかの箇所で <p> タグが開始されているにもかかわらず、対応する </p> タグが欠落している部分にこれらが追加されました。これは、HTMLの構造を正しく定義し、ブラウザがドキュメントを意図通りにレンダリングできるようにするために重要です。特に、コードブロックを示す <pre> タグの前後で、段落の区切りが明確になるように修正されています。
    • 例: in comma-separated lists. の後に </p> が追加された箇所や、structure, that is, a pointer to a <code>nil</code> slice value. の後に </p> が追加された箇所など、複数の同様の修正が見られます。
  2. 行末の余分なスペースの削除:

    • <pre> タグで囲まれたコード例の行末に、視覚的には見えにくい余分なスペースが存在していました。これらのスペースは、HTMLのレンダリングには直接的な影響を与えませんが、コードのクリーンアップ、ファイルサイズのわずかな削減、そしてバージョン管理システムでの差分表示のノイズを減らすという点で意味があります。また、一部のコードスタイルガイドやリンターは、行末のスペースを禁止しているため、それらの規則に準拠するための修正とも考えられます。
    • 例: go list.Sort() // run list.Sort concurrently; don\'t wait for it. の行末や、c <- 1 // Send a signal; value does not matter. の行末からスペースが削除されています。

これらの修正は、ドキュメントの可読性やメンテナンス性に直接寄与するものであり、Go言語の公式ドキュメントの品質を維持するための継続的な取り組みの一環と言えます。

関連リンク

参考にした情報源リンク