时间:2021-05-22
我们经常在使用CLI工具的时候,都会有这样的参数输出:
➜ ~ docker versionClient: 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➜ ~可以打印出构建时对应的版本信息,比如 Version,Go Version,Git Commit等,这个是如何实现的呢?
实现
主要是通过ldflags参数来实现在构建的时候对变量进行赋值。
比如下面一段代码:
package mainimport ( "flag" "fmt" "os")//需要赋值的变量var version = ""//通过flag包设置-version参数var printVersion boolfunc 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")}构建命令:
go build -ldflags "-X main.version=v0.1" -o example程序输出:
➜ ./exampleversion=v0.1参数说明
1、-ldflags build命令中用于调用接链接器的参数
-ldflags '[pattern=]arg list' arguments to pass on each go tool link invocation.2、-X 链接器参数,主要用于设置变量
-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包单独做了一个包存放,只需要引入即可:
package mainimport ( "flag" "github.com/go-demo/version")//通过flag包设置-version参数var printVersion boolfunc init() { flag.BoolVar(&printVersion, "version", false, "print program build version") flag.Parse()}func main() { if printVersion { version.PrintVersion() }}构建的shell如下(也可以放在Makefile中):
#!/bin/shversion="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.goTIPS: 如果值内容中含有空格,可以用单引号
最终版本输出:
➜ sh build.sh➜ ./example -versionVersion: v0.1Go Version: go version go1.13.1 darwin/amd64Git Commit: a775ecd27c5e78437b605c438905e9cc888fbc1cBuild Time: 2020-01-09 19:01:51完整代码:https://github.com/go-demo/version
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍如何在ionic项目中使用设备的camera。Ionic版本:v3.2.0/2017-05-10/MITLicensed/ReleaseNotes1)第
Gradle插件代码可以在build.gradle中,buildSrc项目中,以及独立的插件项目中编写。本文将介绍如何在一个独立的项目中使用Java语言编写Gr
前面一篇有说道如何在MyEclipse中搭建maven项目,这里将继续介绍如何在搭建好的基础maven项目中引入我们常用的javaweb框架——SpringMV
Api的版本控制是Api开发中经常遇到的问题,在大部分中大型项目都需要使用到Api的版本控制在本篇博客中,我们将说明一下如何在.NetCoreApi项目中使用A
springBoot是java开发中会经常用到的框架,那么在实际项目中项目配置了springBoot框架,应该如何在项目中读取配置文件中的参数呢?1、打开ecl