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

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

このコミットは、Go言語の公式ドキュメントである「Effective Go」のテンプレートファイルにおいて、浮動小数点数の型指定を float から float64 へと修正するものです。これは、Go言語における浮動小数点数の正確な型表現を反映し、ドキュメントの正確性を向上させるための変更です。

コミット

  • コミットハッシュ: 7478bb981a7f7fb1d9796a23a560c00013b9a7c1
  • 作者: Andrew Gerrand adg@golang.org
  • コミット日時: Mon Jan 9 12:48:42 2012 +1100
  • コミットメッセージ: doc: float -> float64 in Effective Go template

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

https://github.com/golang/go/commit/7478bb981a7f7fb1d9796a23a560c00013b9a7c1

元コミット内容

doc: float -> float64 in Effective Go template

R=r, dsymonds
CC=golang-dev
https://golang.org/cl/5530047

変更の背景

Go言語には、一般的なプログラミング言語に見られるような単一の「float」型は存在しません。代わりに、32ビットの float32 と64ビットの float64 という、明確にビット幅が定義された浮動小数点数型が提供されています。Go言語の設計思想として、型の曖昧さを排除し、開発者が使用する型の特性を明確に意識することを促しています。

「Effective Go」は、Go言語の慣用的な書き方やベストプラクティスを解説する公式ドキュメントであり、Goプログラマーにとって非常に重要なリソースです。このドキュメント内のコード例や説明は、Go言語の仕様に厳密に準拠している必要があります。

このコミットが行われた2012年1月時点では、Go言語はまだ比較的新しい言語であり、ドキュメントの整備も進められている段階でした。doc/effective_go.tmpl ファイル内のコードスニペットに float と記述されている箇所がありましたが、これはGo言語の実際の型システムとは異なる表現でした。この不正確な記述を float64 に修正することで、「Effective Go」ドキュメントの正確性を保ち、読者がGo言語の型システムについて誤解するのを防ぐことが変更の背景にあります。

前提知識の解説

Go言語の浮動小数点数型

Go言語では、浮動小数点数を扱うために以下の2つの型が提供されています。

  • float32: IEEE 754単精度浮動小数点数に対応し、32ビット(4バイト)で表現されます。約6〜7桁の10進精度を持ち、メモリ効率が重要な場合や、より高い精度が不要な場合に使用されます。
  • float64: IEEE 754倍精度浮動小数点数に対応し、64ビット(8バイト)で表現されます。約15桁の10進精度を持ち、ほとんどの科学技術計算や金融計算など、高い精度が要求される場面で推奨されます。Go言語において、浮動小数点数のリテラル(例: 3.14)を型指定なしで宣言した場合、デフォルトで float64 型として扱われます。

Go言語には、C言語やJavaのような「float」という汎用的な浮動小数点数型は存在しません。これは、開発者に明示的に精度を選択させることで、意図しない精度低下や丸め誤差を防ぐというGo言語の設計思想に基づいています。

Effective Go

「Effective Go」は、Go言語の公式ドキュメントの一つで、Go言語を効果的かつ慣用的に使用するためのガイドラインを提供しています。Go言語の基本的な構文だけでなく、設計原則、エラーハンドリング、並行処理、テストの書き方など、Goプログラミングにおけるベストプラクティスが網羅されています。Go言語の学習者から経験豊富な開発者まで、幅広い層にとって必読のドキュメントとされています。このドキュメントは、Go言語の設計者自身によって書かれており、Go言語の哲学を理解する上でも非常に重要です。

技術的詳細

このコミットは、doc/effective_go.tmpl というテンプレートファイル内のコード例を修正するものです。テンプレートファイルは、最終的なドキュメントを生成するために使用されるソースファイルです。

変更の技術的なポイントは以下の通りです。

  1. 型宣言の正確性: Go言語の構造体(struct)のフィールド宣言において、float という型はGoのコンパイラによって認識されません。これはコンパイルエラーとなります。このコミットは、ドキュメント内のコード例が実際にGo言語でコンパイル可能かつ正確であることを保証するために、float を有効な型である float64 に変更しています。
  2. ドキュメントの信頼性向上: 公式ドキュメントである「Effective Go」は、Go言語の規範となるべきものです。ドキュメント内のコード例がGo言語の実際の仕様と異なる場合、読者に誤った知識を与え、混乱を招く可能性があります。この修正は、ドキュメントの信頼性と正確性を高める上で重要です。
  3. Go言語の型システムの強調: この変更は、Go言語が浮動小数点数に対して明示的なビット幅の型(float32float64)を要求するという、その厳密な型システムを暗黙的に強調しています。これにより、開発者は浮動小数点数の精度について常に意識するよう促されます。

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

変更は doc/effective_go.tmpl ファイルの1箇所のみです。

--- a/doc/effective_go.tmpl
+++ b/doc/effective_go.tmpl
@@ -1490,7 +1490,7 @@ format <code>%#v</code> prints the value in full Go syntax.
 <pre>
 type T struct {
     a int
-    b float
+    b float64
     c string
 }
 t := &amp;T{ 7, -2.35, \"abc\\tdef\" }\n

具体的には、type T struct { ... } の定義内で、フィールド b の型が float から float64 に変更されています。

コアとなるコードの解説

変更されたコードスニペットは、Go言語における構造体の定義と初期化の例を示しています。

type T struct {
    a int
    b float64 // 変更箇所
    c string
}
t := &T{ 7, -2.35, "abc\tdef" }

このコードは、T という名前の構造体を定義しています。

  • a は整数型 (int)
  • b は浮動小数点数型 (float64)
  • c は文字列型 (string)

として定義されています。

変更前は b float となっていましたが、Go言語には float という型が存在しないため、このコードはコンパイルエラーとなります。float64 に修正することで、このコードスニペットはGo言語の有効な構文となり、ドキュメントの正確性が保証されます。

t := &T{ 7, -2.35, "abc\tdef" } の行は、構造体 T の新しいインスタンスを初期化し、そのポインタを変数 t に代入しています。この初期化では、フィールドの順序に従って値が提供されています。

この修正は、Go言語の型システムに対する正確な理解と、公式ドキュメントの品質維持に対するコミッターの細やかな配慮を示しています。

関連リンク

参考にした情報源リンク