社内で使うGO製ツールにバージョンを埋め込みたくなったのでちょっと動作確認してみた。
ldflagsオプションから変数を渡すことが出来るとのことだったので適当なコードを書いてみた。
% go build -ldflags="-X main.version 1.0" % ./build -h test tool Version: 1.0
変数と値の間に "=" おいてるとちゃんとバージョンが埋め込まれない模様。 最初のビルド時にしばらくハマった。
% go build -ldflags="-X main.version=1.0"
参考
package main import ( "flag" "fmt" ) var ( version string ) func init() { flag.Usage = usage flag.Parse() } func usage() { fmt.Println("test tool ") fmt.Println("Version:", version) } func main() { fmt.Println("Hey World!") }
2016-02-20 追記
go1.5ぐらいから "=" を挟まない書き方をすると警告が出るようになった。
下は現在のgitのリビジョンをコミットに含める例。
% go build -o sample -ldflags="-X main.version `git rev-parse --verify HEAD`" link: warning: option -X main.version 8abced796a6ceb555c8ebc14c1884798307e4b73 may not work in future releases; \ use -X main.version=8abced796a6ceb555c8ebc14c1884798307e4b73 <= ホントは1行
% go build -o sample -ldflags="-X main.version=`git rev-parse --verify HEAD`" % ./sample -h test tool Version: 8abced796a6ceb555c8ebc14c1884798307e4b73