概要
goでC言語等の#ifdef
のように条件によってコンパイルされるコードを分けたくなり、やり方を調べました。
build tagsを利用する
「Golang Cafe #25 まとめ デバッグとリリースビルドの切り替え方法を考える」を参考にためしてみました。
ソースファイルの先頭に、// +build <タグ名>
や// +build !<タグ名>
等と入れておくと、
go build -tags=<タグ名>
等の指定にそってコンパイルするソースファイルを選別するようになるようです。
実際には以下のような記載になります。
// +build hoge
pacakage main
import "fmt"
func main() {
...
と書いたファイルと
// +build !hoge
pacakage main
import "log"
func main() {
...
と書いた二つファイル用意すると、
go build
を実行した場合は、nothoge.go
が採用され、
go build -tags=hoge
を実行した場合は、hoge.go
が採用されます。
go test
やgo get
も
go buildと同様に、
go test -tags=<tag>
とすると条件にあったソースファイルを選別し、テストが行われるので、
テストコードファイル側にも同様の記載をすると良さそうです。
また、go get -d -tags=<tag>
等も有効で、 採用されなかったソースコードのみimportしているパッケージはgetされないようになります。
注意点
// +build <tag>
の次の行は必ず空行を入れましょう。
空行を入れないとうまく動きません。これで少しハマりました。