作为外包系统,或者自动集成系统,发布的 Golang 程序往往需要携带版本号,作者,git 哈希等信息。
这一点,Go 语言编译器提供了 -ldflags
来传递变量参数,举个例子,下面的代码,当我们使用 -v
参数时,程序会输出当前的 git Hash,编译时间和编译时的 Go 版本号
package main import ( "fmt" "os" ) var ( gitHash string buildTime string goVersion string ) func main() { args := os.Args if len(args) == 2 && (args[1] == "--version" || args[1] == "-v") { fmt.Printf("Git Comit Hash:%s\n", gitHash) fmt.Printf("编译时间: %s \n", buildTime) fmt.Printf("编译器 Go 版本: %s \n", goVersion) } }
编译时的参数如下
go build -ldflags "-X 'main.goVersion=$(go version)' -X 'main.gitHash=$(git show -s --format=%H)' -X 'main.buildTime=$(git show -s --format=%cd)'" main.go
然后运行 ./main
时结果如下
Git Comit Hash:5e2d8e869ca42b73e5790c7c0fd7184c5e654145 编译时间: Thu Apr 9 15:53:32 2020 +0800 编译器 Go 版本: go version go1.14.1 darwin/amd64
目前尚无回复