-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