您好,登錄后才能下訂單哦!
這篇文章主要介紹了Go項目中如何添加生成時間與版本信息的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Go項目中如何添加生成時間與版本信息文章都會有所收獲,下面我們一起來看看吧。
假如有如下Go源碼:
package main var BuildTime string func main() { fmt.Printf("Build Time: %s\n", BuildTime ) }
使用Go的編譯參數:
-ldflags -X importpath.name=value
來設置。
在Linux、MinGW、Cygwin、MacOS的Bash中可以使用如下指令來指定生成的時間信息:
go build -ldflags "-X 'main.BuildTime=`date +'%Y-%m-%d %H:%M:%S'`'" -o main.exe
但是在Windows的命令行中不能正常工作,包括在Windows的Goland中也不能正常工作。
由于C語言__DATE__宏是使用的英文字母表示的月份,為了方便、直觀,這里在Go語言中改為阿拉伯數字來表示,并改為年-月-日 時:分:秒的數字表現形式。
生成時間一經生成是不會變的,所以在Go語言中只需要獲取一次即可,如果有值了,則直接返回。
直接上代碼:
package ver /* const char* GetCompileDate() { return __DATE__; } const char* GetCompileTime() { return __TIME__; } */ import "C" import ( "fmt" "strings" ) var buildTime string func GetBuildTime() string { if buildTime != "" { return buildTime } date := C.GoString(C.GetCompileDate()) tm := C.GoString(C.GetCompileTime()) strMonth := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Sep", "Dec"} arStr := strings.Split(date, " ") for i, s := range strMonth { if s == arStr[0] { buildTime = fmt.Sprintf("%s-%02d-%s %v", arStr[2], i+1, arStr[1], tm) break } } return buildTime }
由于使用了CGO,所以需要安裝有GCC編譯器。這種方式在Windows與Linux下都可以使用。
git獲取版本信息的指令為git show -s --format=%H,可以使用Go來執行然后獲取返回結果即可。
代碼如下:
package ver import "os/exec" var gitVer string func GetGitVer() string { if gitVer != "" { return gitVer } Cmd := exec.Command("git", "show", "-s", "--format=%H") out, err := Cmd.Output() if err != nil { return gitVer } gitVer = string(out[:len(out)-1]) return gitVer }
由于Cmd返回的結果中有一個換行符\n,所以在獲取后有把它去掉。
這就比較容易了,Go語言自帶:
1. Go語言版本信息
runtime.Version()
2. 當前Go使用的操作系統信息
runtime.GOOS
3.當前GO使用的CPU指令架構信息
runtime.GOARCH
關于“Go項目中如何添加生成時間與版本信息”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Go項目中如何添加生成時間與版本信息”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。