..

Go程序编译注入版本信息

  1. 编译注入全局变量
flags="-X 'main.goversion=$(go version)'"
go build -ldflags "$flags" -x -o build-version main.go
  1. Go的debug包可以自动注入版本信息
if version {
        info, ok := debug.ReadBuildInfo()
        if ok {
                println(info.Main.Version, info.Main.Sum)
        }
        os.Exit(0)
}

这种方式有一定的局限性,本地编译的时候版本永远都是 (devel), 只有通过 go install 命令才能展示编译时候的 git tag 版本。