在编译 Go 程序的时候如何加入一些额外的信息,比如 当前最新的
commit sha,编译的go version之类的
通过 go build -ldflags "-X importpath.name=value' " 赋值字符串value给指定包importpath中的变量name
-ldflags 会将后边的参数传递给 go tool link 链接器
go tool link 的 -X 会将字符串赋值给指定包中变量,格式是 importpath.name=value
// main.go
package main
import "fmt"
var (
Author string
GoVersion string
)
func main() {
fmt.Printf("Author: %s\n", Author)
fmt.Printf("GoVersion: %s\n", Date)
}
可以赋值多个变量
$ go build -ldflags "-X 'main.Author=iceber' -X 'main.GoVersion=`go version`'" main.go
$ ./main
Author: iceber
GoVersion: go version go1.13.4 darwin/amd64
赋值其他包中的变量
$ go build -ldflags "-X 'github.com/Iceber/test/pkg/build.GitCommitSha=`git log --pretty=format:%h`'" .
分享一下获取 git commit sha 的方法
获取一行 commit sha + commit message
# 显示一行简洁的信息 sha 和 message
$ git log --pretty=oneline -1
1b956f133ba1de1d53f76461d6d1b625b303f29d fix
使用 abbrev-commit flag 可以获取前 7 位 commit sha
$ git log --pretty=oneline --abbrev-commit -1
1b956f13 fix
直接使用 oneline flag
$ git log --oneline -1
1b956f13 fix
如果只显示 sha 怎么办呢
$ git log --pretty=format:'%h' -1
1b956f13
需要使用 pretty format
%h 可以打印缩短的 sha
%H 打印完整 sha
%s 打印 commit message
详细可以参考 git log 输出格式