濮阳杆衣贸易有限公司

主頁 > 知識庫 > 詳解如何在Go項目中輸出版本信息

詳解如何在Go項目中輸出版本信息

熱門標(biāo)簽:福州鐵通自動外呼系統(tǒng) 智能電銷機(jī)器人營銷 長沙ai機(jī)器人電銷 賺地圖標(biāo)注的錢犯法嗎 廣東語音外呼系統(tǒng)供應(yīng)商 烏魯木齊人工電銷機(jī)器人系統(tǒng) 濮陽自動外呼系統(tǒng)代理 地圖標(biāo)注測試 澳門防封電銷卡

我們經(jīng)常在使用CLI工具的時候,都會有這樣的參數(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)建時對應(yīng)的版本信息,比如 Version,Go Version,Git Commit等,這個是如何實(shí)現(xiàn)的呢?

實(shí)現(xiàn)

主要是通過ldflags參數(shù)來實(shí)現(xiàn)在構(gòu)建的時候?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.

一個完整的例子

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

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)容中含有空格,可以用單引號

最終版本輸出:

➜ 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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

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

標(biāo)簽:阿克蘇 慶陽 調(diào)研邀請 德州 西雙版納 貴陽 廣西 太原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解如何在Go項目中輸出版本信息》,本文關(guān)鍵詞  詳解,如,何在,項,目中,輸出,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解如何在Go項目中輸出版本信息》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解如何在Go項目中輸出版本信息的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    兰西县| 临高县| 余庆县| 射阳县| 卢湾区| 巨野县| 图木舒克市| 吐鲁番市| 大庆市| 双峰县| 偃师市| 上高县| 浦城县| 聂拉木县| 清水河县| 昌吉市| 德州市| 会理县| 永修县| 五华县| 永丰县| 徐汇区| 衡阳市| 西乡县| 儋州市| 繁峙县| 邓州市| 荣昌县| 柘城县| 高州市| 洪江市| 大悟县| 韶关市| 安福县| 开化县| 临汾市| 扬中市| 宁阳县| 西峡县| 滨海县| 察哈|