Golang 編譯應用程序動態版本號

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}
發佈了72 篇原創文章 · 獲贊 62 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章