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

詳解如何在Go項(xiàng)目中輸出版本信息

 更新時(shí)間:2020年01月10日 11:00:09   作者:silenceper  
這篇文章主要介紹了詳解如何在Go項(xiàng)目中輸出版本信息,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們經(jīng)常在使用CLI工具的時(shí)候,都會(huì)有這樣的參數(shù)輸出:

➜ ~ docker version
Client: Docker Engine - Community
 Version:   18.09.2
 API version:  1.39
 Go version:  go1.10.8
 Git commit:  6247962
 Built:    Sun Feb 10 04:12:39 2019
 OS/Arch:   darwin/amd64
 Experimental:  false
➜ ~

可以打印出構(gòu)建時(shí)對(duì)應(yīng)的版本信息,比如 Version,Go Version,Git Commit等,這個(gè)是如何實(shí)現(xiàn)的呢?

實(shí)現(xiàn)

主要是通過ldflags參數(shù)來實(shí)現(xiàn)在構(gòu)建的時(shí)候?qū)ψ兞窟M(jìn)行賦值。

比如下面一段代碼:

package main

import (
 "flag"
 "fmt"
 "os"
)

//需要賦值的變量
var version = ""

//通過flag包設(shè)置-version參數(shù)
var printVersion bool

func init() {
 flag.BoolVar(&printVersion, "version", false, "print program build version")
 flag.Parse()
}

func main() {
 if printVersion {
  println(version)
  os.Exit(0)
 }
 fmt.Printf("example for print version")
}

構(gòu)建命令:

go build -ldflags "-X main.version=v0.1" -o example

程序輸出:

➜ ./example
version=v0.1

參數(shù)說明

1、-ldflags build命令中用于調(diào)用接鏈接器的參數(shù)

-ldflags '[pattern=]arg list'
 arguments to pass on each go tool link invocation.

2、-X 鏈接器參數(shù),主要用于設(shè)置變量

-X importpath.name=value
 Set the value of the string variable in importpath named name to value.
 Note that before Go 1.5 this option took two separate arguments.
 Now it takes one argument split on the first = sign.

一個(gè)完整的例子

這里將version包單獨(dú)做了一個(gè)包存放,只需要引入即可:

package main

import (
  "flag"

  "github.com/go-demo/version"
)

//通過flag包設(shè)置-version參數(shù)
var printVersion bool

func init() {
  flag.BoolVar(&printVersion, "version", false, "print program build version")
  flag.Parse()
}

func main() {
  if printVersion {
    version.PrintVersion()
  }
}

構(gòu)建的shell如下(也可以放在Makefile中):

#!/bin/sh
version="v0.1"
path="github.com/go-demo/version"
flags="-X $path.Version=$version -X '$path.GoVersion=$(go version)' -X '$path.BuildTime=`date +"%Y-%m-%d %H:%m:%S"`' -X $path.GitCommit=`git rev-parse HEAD`"
go build -ldflags "$flags" -o example example-version.go

TIPS: 如果值內(nèi)容中含有空格,可以用單引號(hào)

最終版本輸出:

➜ sh build.sh
➜ ./example -version
Version: v0.1
Go Version: go version go1.13.1 darwin/amd64
Git Commit: a775ecd27c5e78437b605c438905e9cc888fbc1c
Build Time: 2020-01-09 19:01:51

完整代碼:https://github.com/go-demo/version

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Golang 模塊引入及表格讀寫業(yè)務(wù)快速實(shí)現(xiàn)示例

    Golang 模塊引入及表格讀寫業(yè)務(wù)快速實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Golang模塊引入及表格讀寫業(yè)務(wù)的快速實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語言基本類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    Go語言基本類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    本文詳細(xì)介紹了Go語言中的基本類型轉(zhuǎn)換方法,包括字符串與基本類型之間的轉(zhuǎn)換、浮點(diǎn)數(shù)與字符串之間的轉(zhuǎn)換、布爾型與字符串之間的轉(zhuǎn)換,以及基本類型之間的強(qiáng)制轉(zhuǎn)換以及格式化輸出,感興趣的可以了解一下
    2024-11-11
  • 利用Go語言開發(fā)文件操作工具輕松處理所有文件

    利用Go語言開發(fā)文件操作工具輕松處理所有文件

    在后端開發(fā)中,文件操作是一個(gè)非常常見但又容易出錯(cuò)的場(chǎng)景,本文小編要向大家介紹一個(gè)強(qiáng)大的 Go 語言文件操作工具庫,它能幫你輕松處理各種文件操作場(chǎng)景
    2025-03-03
  • Go處理PDF的實(shí)現(xiàn)代碼

    Go處理PDF的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Go處理PDF的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • go語言基礎(chǔ) seek光標(biāo)位置os包的使用

    go語言基礎(chǔ) seek光標(biāo)位置os包的使用

    這篇文章主要介紹了go語言基礎(chǔ) seek光標(biāo)位置os包的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • golang操作mongodb的方法

    golang操作mongodb的方法

    這篇文章主要介紹了golang操作mongodb的方法,涉及Go語言操作mongodb的連接、讀取及顯示的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 淺析Go語言中的map數(shù)據(jù)結(jié)構(gòu)是如何實(shí)現(xiàn)的

    淺析Go語言中的map數(shù)據(jù)結(jié)構(gòu)是如何實(shí)現(xiàn)的

    在?Go?中,map?是一種用于存儲(chǔ)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),它提供了一種快速查找和訪問數(shù)據(jù)的方式,下面我們就來看看Go語言中是如何實(shí)現(xiàn)map數(shù)據(jù)結(jié)構(gòu)的吧
    2024-03-03
  • Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔問題

    Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔問題

    這篇文章主要介紹了Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔,在go語言中,沒有直接調(diào)用時(shí)鐘的函數(shù),可以通過?time.Now()?獲得帶單調(diào)時(shí)鐘的?Time?結(jié)構(gòu)體,并通過Since和Until獲得相對(duì)準(zhǔn)確的時(shí)間間隔,需要的朋友可以參考下
    2022-06-06
  • 讓Go反射變快的方法實(shí)例探究

    讓Go反射變快的方法實(shí)例探究

    反射允許你在運(yùn)行時(shí)獲得有關(guān) Go 類型的信息,如果你曾經(jīng)愚蠢地嘗試編寫 json.Unmarshal 之類的新版本,本文將探討的就是如何使用反射來填充結(jié)構(gòu)體值
    2024-01-01
  • 聊聊golang的defer的使用

    聊聊golang的defer的使用

    這篇文章主要介紹了聊聊golang的defer的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

榆社县| 茶陵县| 准格尔旗| 周口市| 孟州市| 兴文县| 宁化县| 屯昌县| 兰坪| 筠连县| 潮安县| 绥阳县| 海丰县| 积石山| 韶关市| 易门县| 怀安县| 林周县| 宁乡县| 甘南县| 梨树县| 朝阳区| 兴海县| 温宿县| 泽普县| 垦利县| 宜丰县| 盘锦市| 南宫市| 黄石市| 长岭县| 延安市| 马鞍山市| 德兴市| 县级市| 射洪县| 沂源县| 临高县| 安泽县| 镇巴县| 无为县|