golang程序添加版本号
这段时间项目经常发布版本,导致我们版本管理混乱。特别是在真实环境上面,没有了版本控制软件协助版本管理,我们无法确认程序到底是新版本还是旧版本。这给我们排查问题带来了很大困扰。于是,我就想给程序本身打上版本号,通过程序就可以看到程序是新版本还是旧版本了。
查看资料发现golang不能像C++那样通过宏定义方式来设置版本号,但是可以在build 时添加参数-ldflags 来添加版本号,如下:
go build -ldflags "-X 'main.MinVersion=1.0.0.1' " -a -v -o xxx.exe main.go
这样,通过以上编译语句,每次发布版本时,更改main.MinVersion=1.0.0.1为相应的版本号即可。
如果,哪一次我们忘记了更改版本号就发布出去了,怎么办?没办法,因为版本号没有没有改,我们无法分辨新版本与旧版本。那么,如何优化这个问题呢?我想给这个版本号添加一个时间戳!这样即使忘记了更改版本号,也可以通过时间戳来确定新旧版本。编译参数如下:
set releasedate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
go build -ldflags "-X 'main.MinVersion=1.0.0.1' -X 'main.PublishDate=%releasedate%'" -a -v -o xxx.exe main.go
代码里面也需要做对应修改,还是贴上代码吧:
package main
import (
"fmt"
)
var MinVersion string
var PublishDate string
func main() {
fmt.Println("当前版本号:%s 发布日期:%s", MinVersion, PublishDate))
}
打印出来的效果是这样的:
当前版本号:1.0.0.1 发布日期:20191011103222
嘿嘿,这样既有版本号,又有时间戳,就不怕不能区分程序版本啦~~~
这里顺便介绍一下日期格式吧
%date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014(年的值)
%date:~5,2% 表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是03(月的值)
%date:~8,2% 表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是01(日的值)
%date:~5% 表示指针从左向右偏移5位,然后提取所有的值
%date:~-5% 表示指针反方向偏移,从最右端开始,偏移5位,然后从指针处提取左边的所有数值。
注意:以上编译脚本,只适用于windows系统环境下编译。如果需要在linux下面使用需要将对应的cmd命令转换成shell命令。