Go编译时加入版本信息

-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

发布了237 篇原创文章 · 获赞 215 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/junmoxi/article/details/103109737