Golang 编译应用程序动态版本号
为了使我本地的代码每次编译都有一个特殊的标记,所以我我这里结合网上的几篇帖子,整理了结合 git 提交码,编译时间,编译程序名称,和编译版本等信息的相关介绍。
使用方法
首先创建一个小项目来做简单验证:
mkdir -p gotest/src
version/version.go
main/main.go
Makefile
使用方法:
1. 进入项目目录 cd /home/liujx/gotest/src
2. 执行 make
3. 执行 make install
4. 执行 ./app_2018030615 -v
即可查看相关编译标记
我的执行结果:
build name: app_2018030614
build ver: v1.1.1
build time: 2018-03-06 14:51:06
Commit_SHA1: c45b99e56075e41cc57bc55544d805fbd19f945b
源代码参考
version.go 源代码:
package version
import (
"os"
. "fmt"
"flag"
)
var (
BuildVersion string
BuildTime string
BuildName string
CommitID string
)
func init() {
var showVer bool
flag.BoolVar( &showVer, "v", false, "show build version" )
flag.Parse()
if showVer{
// Printf( "build name:\t%s\nbuild ver:\t%s\nbuild time:\t%s\nCommitID:%s\n", BuildName, BuildVersion, BuildTime, CommitID )
Printf( "build name:\t%s\n", BuildName )
Printf( "build ver:\t%s\n", BuildVersion )
Printf( "build time:\t%s\n", BuildTime )
Printf( "Commit ID:\t%s\n", CommitID )
os.Exit( 0 )
}
}
main.go 源代码:
package main
import (
"fmt"
_ "version"
)
func main(){
fmt.( "我爱北京天安门" )
}
Makefile 源代码:
BUILD_VERSION := v1.1.1
BUILD_TIME := $(shell date "+%F %T")
BUILD_NAME := app_$(shell date "+%Y%m%d%H" )
SOURCE := ./src/main/main.go
TARGET_DIR := /home/liujx/gotest_install/
COMMIT_SHA1 := $(shell git rev-parse HEAD )
all:
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64
go build -ldflags \
" \
-X 'version.BuildVersion=${BUILD_VERSION}' \
-X 'version.BuildTime=${BUILD_TIME}' \
-X 'version.BuildName=${BUILD_NAME}' \
-X 'version.CommitID=${COMMIT_SHA1}' \
" \
-o ${BUILD_NAME} ${SOURCE}
clean:
rm ${BUILD_NAME} -f
install:
mkdir -p ${TARGET_DIR}
cp ${BUILD_NAME} ${TARGET_DIR} -f
.PHONY : all clean install ${BUILD_NAME}