Go

Go言語: ビルド時にバージョン情報を埋め込みたい

More than 3 years have passed since last update.


課題


  • 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

ビルドされたアプリを実行してみると、変数 version1.0.0 が代入されているのが分かる。

$ ./app

version: 1.0.0

-ldflags-X で与える引数は パッケージ名.変数名 であればなんでも使えるので、バージョン情報だけでなく、ちょっとした設定値やソースコードには含めたくないけど、ビルドには含んでおきたい情報などを埋め込むのにも使える。

なお、静的ファイルのような大きいデータを含める場合は -ldflags ではなく、jteeuwen/go-bindata を使ったほうがビルドしやすいかもしれない。