GoのBuild Constraints

最近はGo言語を使ってウェブアプリケーションのサーバサイドプログラムをやっています。
そしてゆくゆくは公開する事を考えているのでGoogle App Engineで動くようにしたい。

ところが,スタンドアロンでもGoogleAppEngineでもどちらでも動くように作るやり方がなかなか分からない。
Google App Engineのライブラリの使用方法はGo言語の標準ライブラリを使うコードとほぼおなじなのでなんとかハイブリッドなコードで作りたい…

と,ココらへんまでを前回のブログに書きました。


そしてやっと動くようになったので今日はその備忘録を。

Build Constraints

GoにはC言語C++でいうプリプロセッサの機能はありません。つまりifdefでマクロとかは使えません。

しかしその代わりに,Build Constraintsがあります。
これは簡単に言えばファイル先頭にコメント文で+buildというタグを書く事でファイルをビルドするかどうかを指定できる機能です。

この機能を使えばターゲットのOSやアーキテクチャによってビルドするソースを切り替えできます。

Build Constraintsの機能の詳細はbuild - The Go Programming Languageに書かれています。
(2013年10月の時点では日本語の翻訳記事が見当たりませんでした…)

Build Constraintsを使ってみる

使い方は簡単で,goのファイル先頭に

// +build オプション

と書きます。オプションの所はruntimeパッケージのGOOSやGOARCHにある単語を指定できます。

これで,例えばオプションで指定したOSとは異なるOSだった場合はビルドの対象になりません。

Build Constraintsの使用上の注意点その1

記述する場所はpackageコマンドの前でないといけません。

そしてpakcageと+buildタグの間には空行を忘れてはいけません

// +build 
pacakge main

これでは通らないよ!

Build Constraintsの使用上の注意点その2

go buildコマンドの引数にファイル名を指定した場合は+buildの記述があっても無視されました。

ちなみにgoはgo build -o ***で必要ならサブフォルダまで見に行くのでファイルの指定はいらないです。