go build注入信息到可执行文件 - Mon, Jan 13, 2020
go build注入信息到可执行文件
1. 概述
go编译时可以将git版本信息,go版本信息,编译时间注入到可执行文件中,方便后续版本会退.
2. 编译选项
Makefile
# 版本号 v1.0.3-6-g0c2b1cf-dev
# 1、6:表示自打tag v1.0.3以来有6次提交(commit)
# 2、g0c2b1cf:g 为git的缩写,在多种管理工具并存的环境中很有用处
# 3、0c2b1cf:7位字符表示为最新提交的commit id 前7位
# 4、如果本地仓库有修改,则认为是dirty的,则追加-dev,表示是开发版:v1.0.3-6-g0c2b1cf-dev
VERSION := $(shell git describe --tags --always --dirty="-dev")
# 时间
DATE := $(shell date -u '+%Y-%m-%d-%H%M UTC')
# 版本标志 -s -w 缩小可执行文件大小
VERSION_FLAGS := -ldflags='-X "main.Version=$(VERSION)" -X "main.BuildTime=$(DATE)" -s -w'
编译指令
CGO_ENABLED=0 go build -v -ldflags='-X "main.Version=f088d2a-dev" -X "main.BuildTime=2020-01-13-0809 UTC" -s -w' -o ./bin/test ./test
3. go文件
package main
import (
"github.com/sirupsen/logrus"
)
// inject by go build
var (
Version = "0.0.0"
BuildTime = "2020-01-13-0802 UTC"
)
func init() {
logrus.Infoln("Version:", Version)
logrus.Infoln("BuildTime:", BuildTime)
}
func main() {
logrus.Infoln("Hello Wrold")
}
输出
INFO[0000] Version: f088d2a-dev
INFO[0000] BuildTime: 2020-01-13-0809 UTC
INFO[0000] Hello Wrold