美文网首页
将版本信息打包到go的二进制中

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

作者: LinkinStar | 来源:发表于2020-05-25 23:40 被阅读0次

前言

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

实现

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

package main

import "fmt"

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

func main() {
   fmt.Println("tag:", Tag, "branch:", Branch, "commitID:", CommitID, "DATE:", DATE)
}
#!/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标识包,你可以替换成程序中对应的包就可以。

总结

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

相关文章

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

    前言 很多时候对于go打包后的二进制文件,我们是无法知道这个二进制是什么当前什么版本、什么时候打包的,而很多软件的...

  • go 1.16 embed 实现资源文件(html, css,

      Golang 发布1.16,如今通过//go:embed 注解内嵌资源文件并打包到二进制文件,关于//go:e...

  • Gradle Task 入门 6 发布

    打包备份文件 此时,打包将依赖之前的makeReleaseVersion方法,执行定义好的版本信息并保持使用此配置...

  • <iOS 工具>一些常用的工具性脚本和配置

    下面的脚本用于自动将工程打包为一个二进制 Framework(用于私有 Framework 的二进制打包):#!/...

  • 使用webpack打包更新的时候,将项目的版本信息,打包到dis

    在使用vue2开发项目的时候,编译打包上线,线上环境遇到问题,排查时,为了更好的对应到打包软件的版本,当前GIT分...

  • 免越狱iOS插件注入

    由deb文件得到dylib库后,将dylib库注入到二进制文件中,重新打包完成动态库附带的功能。 1. 获得dyl...

  • temp

    由deb文件得到dylib库后,将dylib库注入到二进制文件中,重新打包完成动态库附带的功能。 1. 获得dyl...

  • iOS动态库注入

    由deb文件得到dylib库后,将dylib库注入到二进制文件中,重新打包完成动态库附带的功能。 1. 获得dyl...

  • 版本的更迭

    版本迭代代码 通过OPenURL直接下载 服务器获取的版本信息日志输出 企业证书打包比较麻烦,涉及到申请证书和打包...

  • go环境配置&vscode dev

    go环境配置 新建目录 下载go的10+版本到"~/.go_env/go" 在.profile中添加如下代码 vs...

网友评论

      本文标题:将版本信息打包到go的二进制中

      本文链接:https://www.haomeiwen.com/subject/vcpxmhtx.html