go build注入信息到可执行文件

  1. 1. 概述
  2. 2. 编译选项
  3. 3. go文件

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                             

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wind.kaisa@gmail.com

💰

×

Help us with donation