最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go項目中添加生成時間與版本信息的方法

 更新時間:2023年04月06日 16:11:35   作者:witton  
本文主要介紹了Go項目中添加生成時間與版本信息的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們在編寫軟件時,一般會有版本號以及生成的時間,Go編譯的程序中,如何添加當(dāng)時的編譯時間以及版本信息?

C/C++語言,非常方便,可以直接使用__DATE__宏即可知道生成時間,但是Go語言沒有。既然Go語言沒有, C語言有,那我們可以直接使用CGO來使用C語言的功能。當(dāng)然也可以使用Go的編譯鏈接參數(shù)來指定,只是這種方式不適用于Windows。

一、獲取生成時間

1.使用Go編譯時的鏈接參數(shù)來指定生成時間

假如有如下Go源碼:

package main

var BuildTime string

func main() {
?? ?fmt.Printf("Build Time: %s\n", BuildTime )
}

使用Go的編譯參數(shù):

-ldflags -X importpath.name=value

來設(shè)置。

在Linux、MinGW、Cygwin、MacOS的Bash中可以使用如下指令來指定生成的時間信息:

go build -ldflags "-X 'main.BuildTime=`date +'%Y-%m-%d %H:%M:%S'`'" -o main.exe

但是在Windows的命令行中不能正常工作,包括在Windows的Goland中也不能正常工作。

2.使用C語言獲取生成時間

由于C語言__DATE__宏是使用的英文字母表示的月份,為了方便、直觀,這里在Go語言中改為阿拉伯?dāng)?shù)字來表示,并改為年-月-日 時:分:秒的數(shù)字表現(xiàn)形式。

生成時間一經(jīng)生成是不會變的,所以在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獲取版本信息的指令為git show -s --format=%H,可以使用Go來執(zhí)行然后獲取返回結(jié)果即可。

代碼如下:

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返回的結(jié)果中有一個換行符\n,所以在獲取后有把它去掉。

三、獲取Go的相關(guān)信息

這就比較容易了,Go語言自帶:

1. Go語言版本信息

runtime.Version()

2. 當(dāng)前Go使用的操作系統(tǒng)信息

runtime.GOOS

3.當(dāng)前GO使用的CPU指令架構(gòu)信息

runtime.GOARCH

到此這篇關(guān)于Go項目中添加生成時間與版本信息的方法的文章就介紹到這了,更多相關(guān)Go添加生成時間與版本信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    這篇文章主要為大家介紹了Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解

    Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解

    Go在不同類型的變量之間賦值時需要顯示轉(zhuǎn)換,不能自動轉(zhuǎn)換。這篇文章主要和大家介紹了Go語言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換,感興趣的小伙伴可以了解一下
    2022-10-10
  • golang?waitgroup輔助并發(fā)控制使用場景和方法解析

    golang?waitgroup輔助并發(fā)控制使用場景和方法解析

    Golang?提供了簡潔的?go?關(guān)鍵字來讓開發(fā)者更容易的進行并發(fā)編程,同時也提供了?WaitGroup?對象來輔助并發(fā)控制,今天我們就來分析下?WaitGroup?的使用方法,順便瞧一瞧它的底層源碼
    2023-09-09
  • Go語言panic和recover的用法實例

    Go語言panic和recover的用法實例

    panic()和recover()是Go語言中用于處理錯誤的兩個重要函數(shù),本文主要介紹了Go語言panic和recover的用法實例,panic()用于中止程序并引發(fā)panic,而recover()用于捕獲panic并恢復(fù)程序的執(zhí)行,感興趣的可以了解一下
    2024-01-01
  • Golang 使用接口實現(xiàn)泛型的方法示例

    Golang 使用接口實現(xiàn)泛型的方法示例

    這篇文章主要介紹了Golang 使用接口實現(xiàn)泛型的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解Go 結(jié)構(gòu)體格式化輸出

    詳解Go 結(jié)構(gòu)體格式化輸出

    這篇文章主要介紹了Go 結(jié)構(gòu)體格式化輸出的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語言,感興趣的朋友可以了解下
    2020-08-08
  • glow工具在命令行讀取Markdown好物分享

    glow工具在命令行讀取Markdown好物分享

    這篇文章主要為大家介紹了一款實用的命令行工具glow,這個CLI工具可以在命令行讀取Markdown,這對于碼農(nóng)來說非常友好,使用起來也非常舒爽
    2022-07-07
  • 詳解Golang中Channel的高級用法

    詳解Golang中Channel的高級用法

    在Go語言中,chan(通道)是一種用于在不同的goroutine之間進行通信的機制,通道可以是無緩沖的(同步的)或有緩沖的(異步的),本文給大家詳細(xì)介紹了Golang中Channel的高級用法,需要的朋友可以參考下
    2024-05-05
  • 從零封裝Gin框架實現(xiàn)數(shù)據(jù)庫初始化GORM

    從零封裝Gin框架實現(xiàn)數(shù)據(jù)庫初始化GORM

    這篇文章主要為大家介紹了從零封裝Gin框架實現(xiàn)數(shù)據(jù)庫初始化GORM,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 基于Golang設(shè)計一套可控的定時任務(wù)系統(tǒng)

    基于Golang設(shè)計一套可控的定時任務(wù)系統(tǒng)

    這篇文章主要為大家學(xué)習(xí)介紹了如何基于Golang設(shè)計一套可控的定時任務(wù)系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07

最新評論

高青县| 剑川县| 苏尼特右旗| 监利县| 连城县| 密云县| 佛教| 鄂伦春自治旗| 含山县| 类乌齐县| 惠来县| 南京市| 中牟县| 鄂托克前旗| 临洮县| 肇源县| 杭州市| 菏泽市| 西吉县| 化德县| 临西县| 嘉荫县| 寿阳县| 大丰市| 当涂县| 乐都县| 浮山县| 剑阁县| 长岛县| 将乐县| 友谊县| 长春市| 永顺县| 金华市| 富顺县| 栖霞市| 丹寨县| 集安市| 周口市| 古浪县| 麻城市|