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}