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

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

このコミットは、src/pkg/go/build/doc.go ファイルに1行の追加を行うものです。具体的には、Goのビルドタグに関するドキュメントにgo1.2ビルドタグの記述が追加されています。

コミット

commit 72d40a4bd9fed9524f7a1ae25d6586e966c5fdcc
Author: Bill Neubauer <wcn@golang.org>
Date:   Tue Oct 22 16:43:32 2013 +0400

    go/build: document the go1.2 build tag
    
    R=golang-dev, adg
    CC=golang-dev
    https://golang.org/cl/14930046

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

https://github.com/golang/go/commit/72d40a4bd9fed9524f7a1ae25d6586e966c5fdcc

元コミット内容

go/build: document the go1.2 build tag

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/14930046

変更の背景

このコミットは、Go 1.2のリリースに伴い、新しく導入されるgo1.2ビルドタグを公式ドキュメントに明記することを目的としています。Go言語では、特定のGoバージョン以降で利用可能な機能やAPIが存在する場合があり、開発者がそれらの機能を利用するコードを記述する際に、ビルドタグを用いて条件付きコンパイルを行うことが一般的です。

go1.2ビルドタグが導入されることで、開発者はGo 1.2以降のバージョンでのみコンパイルされるコードブロックを記述できるようになります。この変更は、Goのビルドシステムが提供する機能の透過性を高め、開発者がGoのバージョンアップに伴う変更に適切に対応できるよう支援するためのものです。ドキュメントに明記することで、開発者がこの新しいビルドタグの存在と利用方法を容易に認識できるようになります。

前提知識の解説

Goのビルドタグ (Build Tags / Build Constraints)

Go言語には「ビルドタグ」または「ビルド制約」と呼ばれる機能があります。これは、Goのソースファイルに特別なコメントを追加することで、特定の条件が満たされた場合にのみそのファイルをビルドに含めるように制御するメカニズムです。これにより、オペレーティングシステム、アーキテクチャ、Goのバージョン、コンパイラの種類、Cgoの有効/無効などに基づいて、異なるコードパスを提供できます。

ビルドタグの構文: ビルドタグは、Goソースファイルの先頭付近に// +buildで始まる行コメントとして記述されます。package宣言よりも前に記述する必要があり、他の行コメントや空行のみがその前に許容されます。ビルド制約とパッケージドキュメントを区別するため、一連のビルド制約の後には空行を続ける必要があります。

例:

// +build linux,amd64

package main

// ...

条件の指定:

  • OR条件: スペースで区切られたタグはOR条件として評価されます。例: // +build linux darwin は、ターゲットがLinuxまたはmacOSの場合にファイルを含めます。
  • AND条件: カンマで区切られたタグはAND条件として評価されます。例: // +build linux,386 は、ターゲットがLinuxかつ386アーキテクチャの場合にファイルを含めます。
  • 否定: タグの前に!を付けると否定条件になります。例: // +build !cgo は、Cgoが無効な場合にファイルを含めます。

Goバージョンタグ: Goの特定のバージョン以降で自動的に満たされる特別なビルドタグも存在します。

  • go1.1: Goバージョン1.1以降で自動的に満たされます。
  • go1.2: Goバージョン1.2以降で自動的に満たされます。

これらのバージョンタグを使用することで、特定のGoバージョンで導入された機能に依存するコードを、そのバージョンをサポートしない古いGo環境でのビルドから除外することができます。

複数の制約: ファイルに複数の// +build行がある場合、全体の制約は個々の制約のANDとして評価されます。

ファイル名による暗黙的な制約: ファイル名に特定のサフィックスを付けることで、暗黙的にビルド制約を適用することもできます。 例:

  • source_windows.go: Windowsビルドでのみ含まれる。
  • math_386.s: 32-bit x86アーキテクチャでのみ含まれる。

このコミットは、このビルドタグの仕組みの一部であるgo1.2タグが、Goのビルドシステムによって認識されるタグの一つとして、公式ドキュメントに明示的に追加されることを示しています。

技術的詳細

このコミットの技術的な詳細は、Goのビルドシステムにおけるビルドタグの管理とドキュメンテーションの正確性に関わっています。

Goのビルドプロセスでは、ソースファイルをコンパイルする際に、各ファイルのビルドタグを評価します。この評価は、現在のビルド環境(OS、アーキテクチャ、Goバージョンなど)と照らし合わせて行われます。go1.2のようなバージョンタグは、Goツールチェーン自体がそのバージョン以降である場合に自動的に「真」と評価される特別なタグです。

src/pkg/go/build/doc.goは、go/buildパッケージのドキュメントを生成するためのソースファイルです。このファイルには、Goのビルドシステムが認識する様々なビルドタグが列挙されています。このコミットでは、そのリストにgo1.2が追加されることで、Go 1.2以降の環境でビルドを行う際に、開発者が// +build go1.2という行をソースファイルに記述することで、そのファイル(またはファイル内の特定のコードブロック)がビルドに含まれることを明示的に示しています。

このドキュメントの更新は、単なるコメントの追加以上の意味を持ちます。それは、Goのビルドシステムがgo1.2という文字列を特別な意味を持つビルドタグとして内部的に処理することを開発者に保証するものです。これにより、Go 1.2で導入された新機能や変更に依存するコードを、古いGoバージョンとの互換性を保ちつつ、適切に管理することが可能になります。例えば、Go 1.2で追加された新しい標準ライブラリの関数を使用するコードは、// +build go1.2タグを付けることで、Go 1.1以前の環境ではコンパイルエラーにならずにスキップされるようになります。

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

--- a/src/pkg/go/build/doc.go
+++ b/src/pkg/go/build/doc.go
@@ -94,6 +94,7 @@
 //	- the compiler being used, either "gc" or "gccgo"
 //	- "cgo", if ctxt.CgoEnabled is true
 //	- "go1.1", from Go version 1.1 onward
+//	- "go1.2", from Go version 1.2 onward
 //	- any additional words listed in ctxt.BuildTags
 //
 // If a file's name, after stripping the extension and a possible _test suffix,

コアとなるコードの解説

このコミットのコアとなる変更は、src/pkg/go/build/doc.goファイルへの1行の追加です。

具体的には、94行目から始まるコメントブロック内に、以下の行が追加されています。

//	- "go1.2", from Go version 1.2 onward

このコメントブロックは、Goのビルドシステムが認識するビルドタグのリストを説明している部分です。既存のリストには、コンパイラの種類(gcgccgo)、Cgoの有効/無効(cgo)、そしてGo 1.1以降で有効なgo1.1タグが含まれていました。

今回の変更は、このリストにgo1.2タグが「Goバージョン1.2以降で有効」であることを明示的に追加するものです。これにより、go/buildパッケージのドキュメントを参照する開発者は、go1.2が有効なビルドタグであり、Go 1.2以降の環境で条件付きコンパイルを行うために使用できることを明確に理解できます。これは、Goのビルドシステムが提供する機能の透明性を高め、開発者がより正確なビルド制約を記述できるようにするための重要なドキュメント更新です。

関連リンク

参考にした情報源リンク