58
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

goで#ifdefのような条件分岐コンパイル

Last updated at Posted at 2014-08-23

概要

goでC言語等の#ifdefのように条件によってコンパイルされるコードを分けたくなり、やり方を調べました。

build tagsを利用する

Golang Cafe #25 まとめ デバッグとリリースビルドの切り替え方法を考える」を参考にためしてみました。
ソースファイルの先頭に、// +build <タグ名>// +build !<タグ名> 等と入れておくと、
go build -tags=<タグ名> 等の指定にそってコンパイルするソースファイルを選別するようになるようです。

実際には以下のような記載になります。

hoge.go
// +build hoge

pacakage main

import "fmt"

func main() {
...

と書いたファイルと

nothoge.go
// +build !hoge

pacakage main

import "log"

func main() {
...

と書いた二つファイル用意すると、
go build を実行した場合は、nothoge.goが採用され、
go build -tags=hogeを実行した場合は、hoge.goが採用されます。

go testgo get

go buildと同様に、
go test -tags=<tag> とすると条件にあったソースファイルを選別し、テストが行われるので、
テストコードファイル側にも同様の記載をすると良さそうです。

また、go get -d -tags=<tag>等も有効で、 採用されなかったソースコードのみimportしているパッケージはgetされないようになります。

注意点

// +build <tag> の次の行は必ず空行を入れましょう。
空行を入れないとうまく動きません。これで少しハマりました。

58
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?