社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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
-o
输出的二进制文件名-v
编译时显示包名-p
n 开启并发编译,默认情况下该值为 CPU 逻辑核数-a
强制重新构建-n
打印编译时会用到的所有命令,但不真正执行-x
打印编译时会用到的所有命令-race
开启竞态检测
查看git commit 的其他格式化参数 https://git-scm.com/docs/pretty-formats
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!