前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将版本信息打包到go的二进制中

将版本信息打包到go的二进制中

作者头像
LinkinStar
发布2022-09-01 13:59:20
3200
发布2022-09-01 13:59:20
举报
文章被收录于专栏:LinkinStar's BlogLinkinStar's Blog

很多时候对于go打包后的二进制文件,我们是无法知道这个二进制是什么当前什么版本、什么时候打包的,而很多软件的命令行都会有一个 -version 的选项来打印出当前程序的版本号,当然你可以直接在程序里面写死这个版本号,但是还有更加优雅的解决方式。

实现

其实很简单,只需要在 build 的时候通过 -X 参数去指定变量值就可以了

代码语言:javascript
复制
package main

import "fmt"

var (
   Tag      = "v0.0.0"
   CommitID = ""
   Branch   = ""
   DATE     = ""
)

func main() {
   fmt.Println("tag:", Tag, "branch:", Branch, "commitID:", CommitID, "DATE:", DATE)
}
代码语言:javascript
复制
#!/bin/sh

# 获取当前commit号
CommitID=$(git rev-parse HEAD)

# 获取当前分支名称
Branch=$(git rev-parse --abbrev-ref HEAD)

# 获取最近的tag
Tag=$(git describe --abbrev=0 --tags)

# 打包时间
DATE=$(date +'%Y-%m-%dT%H:%M:%m+08:00') 

go build -ldflags "-X 'main.Tag=$Tag' -X 'main.Branch=$Branch' -X 'main.CommitID=$CommitID' -X 'main.DATE=$DATE'"

其中需要注意的是,用单引号的原因是防止变量中带有空格,main标识包,你可以替换成程序中对应的包就可以。

总结

这样,当我们在实际生产环境使用的时候,就可以通过这些打包时携带的信息来分析这个包是什么时候的,是否为最新版本等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档