作者:焦作艾文斯 | 来源:互联网 | 2023-06-18 18:38
-ldflags参数Go编译时可通过ldflags动态的为程序里某个变量赋值,我们可以利用这个特性来达到将Go的信息和git的commit信息编译到我们的二进制文件中。packag
-ldflags 参数
Go 编译时可通过 ldflags
动态的为程序里某个变量赋值,我们可以利用这个特性来达到将Go的信息和git 的commit 信息编译到我们的二进制文件中。
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 Commit Hash: %s \n", gitHash)
fmt.Printf("Build TimeStamp: %s \n", buildTime)
fmt.Printf("GoLang Version: %s \n", goVersion)
return
}
}
这里我们定义了三个变量gitHash
buildTime
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)'" -o main.exe version.go
查看效果
Go其他参数
-o
输出的二进制文件名
-v
编译时显示包名
-p
n 开启并发编译,默认情况下该值为 CPU 逻辑核数
-a
强制重新构建
-n
打印编译时会用到的所有命令,但不真正执行
-x
打印编译时会用到的所有命令
-race
开启竞态检测
git commit格式化
查看git commit 的其他格式化参数 https://git-scm.com/docs/pretty-formats