佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 詳解如何在Go項(xiàng)目中輸出版本信息

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

熱門(mén)標(biāo)簽:Linux服務(wù)器 呼叫中心市場(chǎng)需求 鐵路電話系統(tǒng) AI電銷(xiāo) 網(wǎng)站排名優(yōu)化 服務(wù)外包 地方門(mén)戶網(wǎng)站 百度競(jìng)價(jià)排名

我們經(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)

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

比如下面一段代碼:

package main

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

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

//通過(guò)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ù)說(shuō)明

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"
)

//通過(guò)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

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

您可能感興趣的文章:
  • 在Golang代碼中如何自動(dòng)生成版本號(hào)的方法示例
  • golang如何實(shí)現(xiàn)mapreduce單進(jìn)程版本詳解
  • 使用 Go 管理版本的方法示例
  • 淺析Go語(yǔ)言版本的forgery

標(biāo)簽:仙桃 湖南 黃山 衡水 崇左 蘭州 銅川 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解如何在Go項(xiàng)目中輸出版本信息》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    铁岭县| 尉犁县| 安吉县| 闵行区| 西丰县| 安龙县| 彝良县| 盘山县| 宜宾市| 通河县| 沾益县| 肥东县| 年辖:市辖区| 安西县| 板桥市| 五原县| 兴化市| 鸡西市| 新田县| 监利县| 汶川县| 富川| 探索| 通江县| 白玉县| 宁远县| 绥化市| 历史| 昭通市| 淮滨县| 双城市| 报价| 易门县| 沅陵县| 西青区| 正阳县| 张家界市| 蓝田县| 兴和县| 西乌| 安多县|