首頁>技術>

背景

Go程式執行時列印git提交資訊編譯資訊

Golang編譯資訊注入程式

當在debug的過程中,我們需要明確當前執行的go程式是什麼版本

不要浪費時間在確認版本的問題上

在go build編譯的時候是可以注入外部引數的

讓go程式在執行的時候就可以列印編譯時候的引數情況

以gitlab-runner為例

gitlab-runner -vVersion:      11.10.1Git revision: 1f513601Git branch:   11-10-stableGO version:   go1.8.7Built:        2019-04-24T09:29:18+0000OS/Arch:      linux/amd64

最終實現的go程式執行時終端列印的資訊如下

App Name:       app-apiApp Version:    v2.0.1Build version:  84d4ffb verdorBuild time:     2019-08-06T09:58:48+0800Git revision:   84d4ffbGit branch:     masterGolang Version: go version go1.12.2 linux/amd642019-07-24 10:53:34.732 11516: http server started listening on [:20000]
具體實現

入口檔案main.go

package mainimport (    "fmt")var (    AppName      string // 應用名稱    AppVersion   string // 應用版本    BuildVersion string // 編譯版本    BuildTime    string // 編譯時間    GitRevision  string // Git版本    GitBranch    string // Git分支    GoVersion    string // Golang資訊)func main() {    Version()    // 你的業務程式碼入口}// Version 版本資訊func Version() {    fmt.Printf("App Name:\\t%s\\n", AppName)    fmt.Printf("App Version:\\t%s\\n", AppVersion)    fmt.Printf("Build version:\\t%s\\n", BuildVersion)    fmt.Printf("Build time:\\t%s\\n", BuildTime)    fmt.Printf("Git revision:\\t%s\\n", GitRevision)    fmt.Printf("Git branch:\\t%s\\n", GitBranch)    fmt.Printf("Golang Version: %s\\n", GoVersion)}

build編譯構建指令碼build.sh

#!/bin/bashset -ePROJECT_NAME="app-api"BINARY="app-api"OUTPUT_DIR=outputGOOS=$(go env GOOS)APP_NAME=${PROJECT_NAME}APP_VERSION=$(git log -1 --oneline)BUILD_VERSION=$(git log -1 --oneline)BUILD_TIME=$(date "+%FT%T%z")GIT_REVISION=$(git rev-parse --short HEAD)GIT_BRANCH=$(git name-rev --name-only HEAD)GO_VERSION=$(go version)CGO_ENABLED=0 go build -a -installsuffix cgo -v -mod=vendor \\-ldflags "-s -X 'main.AppName=${APP_NAME}' \\            -X 'main.AppVersion=${APP_VERSION}' \\            -X 'main.BuildVersion=${BUILD_VERSION}' \\            -X 'main.BuildTime=${BUILD_TIME}' \\            -X 'main.GitRevision=${GIT_REVISION}' \\            -X 'main.GitBranch=${GIT_BRANCH}' \\            -X 'main.GoVersion=${GO_VERSION}'" \\-o ${OUTPUT_DIR}/${BINARY} cmd/${BINARY}.go

本質上是用 -ldflags 引數注入了的外部引數到go的變數當中go的更多build引數幫助可以通過 go help build獲取

問答

Q: 開發環境是windows,沒有bash環境怎麼辦?A: 都裝了git的吧,那麼用Git Bash終端是支援的

https://www.iamle.com?from=toutiao 釋出!

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 2020年的前端工程師請收下這幾個Vue.js開源框架