概要
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> の次の行は必ず空行を入れましょう。
空行を入れないとうまく動きません。これで少しハマりました。