欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go項(xiàng)目中添加生成時(shí)間與版本信息的方法

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

我們?cè)诰帉?xiě)軟件時(shí),一般會(huì)有版本號(hào)以及生成的時(shí)間,Go編譯的程序中,如何添加當(dāng)時(shí)的編譯時(shí)間以及版本信息?

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

一、獲取生成時(shí)間

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

假如有如下Go源碼:

package main

var BuildTime string

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

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

-ldflags -X importpath.name=value

來(lái)設(shè)置。

在Linux、MinGW、Cygwin、MacOS的Bash中可以使用如下指令來(lái)指定生成的時(shí)間信息:

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

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

2.使用C語(yǔ)言獲取生成時(shí)間

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

生成時(shí)間一經(jīng)生成是不會(huì)變的,所以在Go語(yǔ)言中只需要獲取一次即可,如果有值了,則直接返回。

直接上代碼:

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來(lái)執(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é)果中有一個(gè)換行符\n,所以在獲取后有把它去掉。

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

這就比較容易了,Go語(yǔ)言自帶:

1. Go語(yǔ)言版本信息

runtime.Version()

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

runtime.GOOS

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

runtime.GOARCH

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

相關(guān)文章

  • Go實(shí)現(xiàn)簡(jiǎn)易R(shí)PC框架的方法步驟

    Go實(shí)現(xiàn)簡(jiǎn)易R(shí)PC框架的方法步驟

    本文旨在講述 RPC 框架設(shè)計(jì)中的幾個(gè)核心問(wèn)題及其解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • go語(yǔ)言gin框架中間件詳解

    go語(yǔ)言gin框架中間件詳解

    在Go語(yǔ)言中,gin是一個(gè)常用的Web框架,用于構(gòu)建RESTful API和Web應(yīng)用程序。本文將通過(guò)代碼示例詳細(xì)介紹了gin框架中間件,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Go如何實(shí)現(xiàn)HTTP請(qǐng)求限流示例

    Go如何實(shí)現(xiàn)HTTP請(qǐng)求限流示例

    本篇文章主要介紹了Go如何實(shí)現(xiàn)HTTP請(qǐng)求限流示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • golang logrus日志框架實(shí)例詳解

    golang logrus日志框架實(shí)例詳解

    logrus是一個(gè)可插拔的、結(jié)構(gòu)化的日志框架,這篇文章主要介紹了golang logrus日志框架實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • golang內(nèi)存對(duì)齊的概念及案例詳解

    golang內(nèi)存對(duì)齊的概念及案例詳解

    為保證程序順利高效的運(yùn)行,編譯器會(huì)把各種類(lèi)型的數(shù)據(jù)安排到合適的地址,并占用合適的長(zhǎng)度,這就是內(nèi)存對(duì)齊。本文重點(diǎn)給大家介紹golang內(nèi)存對(duì)齊的概念及案例詳解,感興趣的朋友一起看看吧
    2022-02-02
  • GO中使用谷歌GEMINI模型任務(wù)代碼實(shí)例

    GO中使用谷歌GEMINI模型任務(wù)代碼實(shí)例

    這篇文章主要為大家介紹了GO中使用谷歌GEMINI模型任務(wù)代碼實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go?Web實(shí)戰(zhàn)之創(chuàng)建項(xiàng)目及增加日志功能

    Go?Web實(shí)戰(zhàn)之創(chuàng)建項(xiàng)目及增加日志功能

    這篇文章主要為大家詳細(xì)介紹了Go?Web項(xiàng)目中如何實(shí)現(xiàn)創(chuàng)建項(xiàng)目及增加日志功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • golang將切片或數(shù)組根據(jù)某個(gè)字段進(jìn)行分組操作

    golang將切片或數(shù)組根據(jù)某個(gè)字段進(jìn)行分組操作

    這篇文章主要介紹了golang將切片或數(shù)組根據(jù)某個(gè)字段進(jìn)行分組操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang 刪除切片的某個(gè)元素及剔除切片內(nèi)的零值方式

    golang 刪除切片的某個(gè)元素及剔除切片內(nèi)的零值方式

    這篇文章主要介紹了golang 刪除切片的某個(gè)元素及剔除切片內(nèi)的零值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go 實(shí)現(xiàn)熱重啟的詳細(xì)介紹

    Go 實(shí)現(xiàn)熱重啟的詳細(xì)介紹

    這篇文章主要介紹了Go 實(shí)現(xiàn)熱重啟的詳細(xì)介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論