为了使我本地的代码每次编译都有一个特殊的标记,所以我我这里结合网上的几篇帖子,整理了结合 git 提交码,编译时间,编译程序名称,和编译版本等信息的相关介绍。
使用方法
首先创建一个小项目来做简单验证:
mkdir -p gotest/src
version/version.go
main/main.go
Makefile
cd /home/liujx/gotest/srcmakemake install./app_2018030615 -v
我的执行结果:
build name: app_2018030614
build ver: v1.1.1
build time: 2018-03-06 14:51:06
Commit_SHA1: c45b99e56075e41cc57bc55544d805fbd19f945b
- 1
- 2
- 3
- 4
源代码参考
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 )
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
main.go 源代码:
package main
import (
"fmt"
_ "version"
)
func main(){
fmt.( "我爱北京天安门" )
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
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}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26