Go 編譯時加入版本信息

-ldflags 參數

Go 編譯時可通過 ldflags 動態的爲程序裏某個變量賦值,我們可以利用這個特性來達到將 Go 的信息和 git 的 commit 信息編譯到我們的二進制文件中。

package main

import (
    "fmt"
    "os"
)
var (
    gitHash   string
    buildTime string
    goVersion string
)
func main() {
    args := os.Args
    if len(args) == 2 && (args[1] == "--version" || args[1] == "-v") {
        fmt.Printf("Git Commit Hash: %s \n", gitHash)
        fmt.Printf("Build TimeStamp: %s \n", buildTime)
        fmt.Printf("GoLang Version: %s \n", goVersion)
        return
    }
}

這裏我們定義了三個變量 gitHash buildTime goVersion,我們可以通過下面這個編譯命令將三個變量給賦值進去

 

go build -ldflags "-X 'main.goVersion=$(go version)' -X 'main.gitHash=$(git show -s --format=%H)' -X 'main.buildTime=$(git show -s --format=%cd)'" -o main.exe version.go

Go 其他參數#

-o 輸出的二進制文件名
-v 編譯時顯示包名
-p n 開啓併發編譯,默認情況下該值爲 CPU 邏輯核數
-a 強制重新構建
-n 打印編譯時會用到的所有命令,但不真正執行
-x 打印編譯時會用到的所有命令
-race 開啓競態檢測

git commit 格式化

查看 git commit 的其他格式化參數 https://git-scm.com/docs/pretty-formats

發佈了142 篇原創文章 · 獲贊 337 · 訪問量 224萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章