为了使我本地的代码每次编译都有一个特殊的标记,所以我我这里结合网上的几篇帖子,整理了结合 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