まぁ、当たり前の話ではあるんだけど、github.com/zetamatta/go-windows-dbg を改造するにあたって大丈夫か?とちょっと不安になったので、念のため検証。
サブパッケージ(bar)は release タグの有無で挙動が変わる。タグを指定するのはメインパッケージ(main=foo)となる。
github.com/zetamatta/bar/main.go
サブパッケージ。タグ release が設定されていない時だけ有効
// +build !release package bar func Run() { println("not release") }
github.com/zetamatta/bar/main_release.go
サブパッケージ。タグ release が設定されている時だけ有効
// +build release package bar func Run() { println("release") }
github.com/zetamatta/foo/main.go
メインパッケージ。ここのビルド時にタグを指定する
package main import ( "github.com/zetamatta/bar" ) func main(){ bar.Run() }
実験
<~/go/src/github.com/zetamatta/foo> $ go build && foo not release <:~/go/src/github.com/zetamatta/foo> $ go build -tags=release && foo release
よしよし
複数のビルドタグによる条件ビルドの構文
によると
- AND はタグを
,
(カンマ)区切りでならべるか、次の行に +build 行を追加 - OR はタグを空白区切りでならべる
- 結合の強さは
,
> 空白 >改行
(例)
// +build !ndebug,windows
→! defined(ndebug) && defined(windows)
に相当// +build !windows ndebug
→! defined(windows) || defined(ndebug)
に相当
なるほど!