課題
- Goでアプリケーションを作るとき、バージョン番号をコードに含めるのにいちいち書き換えてている…。
解決策
- ビルドの引数に
-ldflags "-X main.version=バージョン"
をつける。
やりかた
バージョンを代入する変数を一つ作る。
app.go
package main
var version string // 文字列型でバージョンを宣言する
func main() {
println("version: " + version)
}
ビルド時に -ldflags
をつけて実行する。
$ go build -ldflags "-X main.version 1.0.0" app.go
ビルドされたアプリを実行してみると、変数 version
に 1.0.0
が代入されているのが分かる。
$ ./app
version: 1.0.0
-ldflags
の -X
で与える引数は パッケージ名.変数名
であればなんでも使えるので、バージョン情報だけでなく、ちょっとした設定値やソースコードには含めたくないけど、ビルドには含んでおきたい情報などを埋め込むのにも使える。
なお、静的ファイルのような大きいデータを含める場合は -ldflags
ではなく、jteeuwen/go-bindata を使ったほうがビルドしやすいかもしれない。