ビルド制約のドキュメントからの引用:
ビルド制約は、ファイルをパッケージに含める条件をリストするディレクティブ +build で始まる行コメントです。制約は (Go だけでなく) どの種類のソース ファイルにも記述できますが、ファイルの先頭近くに記述し、空白行とその他の行コメントのみを前に付ける必要があります。
ビルドの制約をパッケージ ドキュメントと区別するには、一連のビルドの制約の後に空白行を続ける必要があります。
ビルド制約は、スペースで区切られたオプションの OR として評価されます。各オプションは、カンマ区切りの用語の AND として評価されます。各用語は、英数字の単語、または ! が前に付いたその否定語です。つまり、ビルドの制約:
// +build linux,386 darwin,!cgo
次のブール式に対応します。
(linux AND 386) OR (darwin AND (NOT cgo))
ファイルには複数のビルド制約が含まれる場合があります。全体の制約は、個々の制約の AND です。つまり、ビルドの制約:
// +build linux darwin
// +build 386
次のブール式に対応します。
(linux OR darwin) AND 386
特定のビルド中に、次の単語が満たされます。
- runtime.GOOS で綴られたターゲット オペレーティング システム
- runtime.GOARCH で綴られたターゲット アーキテクチャ
- 使用されているコンパイラ、「gc」または「gccgo」
- 「cgo」、ctxt.CgoEnabled が true の場合
- 「go1.1」、Go バージョン 1.1 以降
- ctxt.BuildTags にリストされている追加の単語
拡張子と可能な _test サフィックスを削除した後のファイル名が、次のパターンのいずれかに一致する場合:
*_GOOS
*_GOARCH
*_GOOS_GOARCH
(例: source_windows_amd64.go) またはリテラル:
GOOS
GOARCH
(例: windows.go) GOOS と GOARCH がそれぞれ既知のオペレーティング システムとアーキテクチャの値を表している場合、ファイルには、これらの用語を必要とする暗黙のビルド制約があると見なされます。
ファイルがビルド対象と見なされないようにするには:
// +build ignore
(他の不満足な言葉も同様に機能しますが、「無視」は慣例です。)
Linux および OS X でのみ、cgo を使用する場合にのみファイルをビルドするには、次のようにします。
// +build linux,cgo darwin,cgo
このようなファイルは、通常、他のシステムのデフォルト機能を実装する別のファイルとペアになっています。この場合、次の制約があります。
// +build !linux,!darwin !cgo
ファイルに dns_windows.go という名前を付けると、Windows 用のパッケージをビルドするときにのみ含まれます。同様に、math_386.s は、32 ビット x86 用のパッケージをビルドする場合にのみ含まれます。