详解如何在Go项目中输出版本信息
来源:脚本之家
2022-12-27 16:47:45
0浏览
收藏
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《详解如何在Go项目中输出版本信息》,聊聊输出、版本,我们一起来看看吧!
我们经常在使用CLI工具的时候,都会有这样的参数输出:
➜ ~ 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 ➜ ~
可以打印出构建时对应的版本信息,比如 Version,Go Version,Git Commit等,这个是如何实现的呢?
实现
主要是通过ldflags参数来实现在构建的时候对变量进行赋值。
比如下面一段代码:
package main
import (
"flag"
"fmt"
"os"
)
//需要赋值的变量
var version = ""
//通过flag包设置-version参数
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")
}
构建命令:
go build -ldflags "-X main.version=v0.1" -o example
程序输出:
➜ ./example version=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 main
import (
"flag"
"github.com/go-demo/version"
)
//通过flag包设置-version参数
var printVersion bool
func init() {
flag.BoolVar(&printVersion, "version", false, "print program build version")
flag.Parse()
}
func main() {
if printVersion {
version.PrintVersion()
}
}
构建的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: 如果值内容中含有空格,可以用单引号
最终版本输出:
➜ 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
终于介绍完啦!小伙伴们,这篇关于《详解如何在Go项目中输出版本信息》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!
版本声明
本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
golang并发编程的实现
- 上一篇
- golang并发编程的实现
- 下一篇
- GO常见的错误99%程序员会遇到(解决方法)
评论列表
-
- 酷炫的钥匙
- 赞 ??,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢up主分享博文!
- 2023-03-29 23:19:09
-
- 英俊的帽子
- 这篇技术贴真及时,好细啊,很有用,收藏了,关注作者了!希望作者能多写Golang相关的文章。
- 2023-03-25 21:13:23
-
- 坚定的故事
- 这篇博文真及时,细节满满,太给力了,码起来,关注作者了!希望作者能多写Golang相关的文章。
- 2023-02-13 06:36:44
-
- 积极的草丛
- 真优秀,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者大大分享博文!
- 2023-01-09 22:49:01
-
- 时尚的铅笔
- 这篇技术贴真是及时雨啊,太细致了,太给力了,mark,关注师傅了!希望师傅能多写Golang相关的文章。
- 2023-01-02 16:51:44
-
- 伶俐的香菇
- 这篇技术文章太及时了,细节满满,很棒,已收藏,关注楼主了!希望楼主能多写Golang相关的文章。
- 2022-12-31 02:54:20
查看更多
最新文章
-
- Golang · Go教程 | 2天前 | go · testing ·
- Go Benchmark报告allocs/op并定位临时对象来源的方法
- 409浏览 收藏
-
- Golang · Go教程 | 2天前 |
- Go fuzz测试把崩溃输入写入回归语料的流程
- 195浏览 收藏
-
- Golang · Go教程 | 2天前 |
- Go testing.T.TempDir管理测试临时文件的清理方法
- 308浏览 收藏
-
- Golang · Go教程 | 2天前 | 日志 · go · slog · Go 结构化日志 log/slog slog.Group
- Go log/slog用Group组织结构化日志字段的实现方式
- 367浏览 收藏
-
- Golang · Go教程 | 2天前 | 资源管理 · Go教程 · database/sql · Go 生命周期 database/sql sql.Stmt 预编译查询
- Go sql.Stmt复用预编译查询时的生命周期管理方法
- 465浏览 收藏
-
- Golang · Go教程 | 2天前 | 事务 · go · database/sql · 重试 事务提交 database/sql 幂等键
- Go database/sql事务提交失败后的重试边界设计
- 429浏览 收藏
-
- Golang · Go教程 | 2天前 | 错误处理 · go · 数据库 · database/sql rows Rows.Err
- Go database/sql遍历Rows后检查尾部错误的实践示例
- 203浏览 收藏
-
- Golang · Go教程 | 2天前 | go · 数据库 · SQL · database/sql 数据库NULL sql.NullString Go数据库查询
- Go database/sql用sql.NullString保留数据库NULL语义的写法
- 501浏览 收藏
-
- Golang · Go教程 | 2天前 | go · 安全 · 编码 · crypto/rand 随机令牌 RawURLEncoding Go令牌
- Go crypto/rand生成短期令牌并避免编码损失的方案
- 323浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
查看更多
AI推荐
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 184次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 240次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 195次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 175次使用
-
- CMMLU
- 深入了解CMMLU中文评估基准,涵盖67个学科主题,提供数据集下载、Zero-shot/Five-shot评估方法及排行榜,助力优化中文语言模型性能。
- 166次使用
查看更多
相关文章
-
- Golang如何将日志以Json格式输出到Kafka
- 2022-12-23 343浏览
-
- 如何让shell终端和goland控制台输出彩色的文字
- 2022-12-31 278浏览
-
- golang的time包:秒、毫秒、纳秒时间戳输出方式
- 2023-02-16 121浏览
-
- 详解Go 结构体格式化输出
- 2023-02-16 415浏览
-
- 深度解析MySQL中Sp运行Check表版本更新流程
- 2023-02-16 402浏览

