golang程序版本管理

沐风 · · 1503 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

概述

版本管理主要用于对运行程序的版本追踪,从而可以管理线上服务的运行版本,避免各个版本的服务程序混淆.这里通常的做法为在程序中埋入版本标志,同时该版本号会对应到git上的tag或release版本.从而对线上服务更改有一个更全面的信息说明.这里将介绍基于GNU风格一种版本命名方式.

1 版本号命名格式

主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]] Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]] 示例 : 1.2.1, 2.0, 5.0.0 build-13124

  • Major

具有相同名称但不同主版本号的程序集不可互换。例如,这适用于对产品的大量重写,这些重写使得无法实现向后兼容性。

  • Minor

如果两个程序集的名称和主版本号相同,而次版本号不同,这指示显著增强,但照顾到了向后兼容性。例如,这适用于产品的修正版或完全向后兼容的新版本。

  • Build

内部版本号的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。

  • Revision

名称、主版本号和次版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。

程序集的只有内部版本号或修订号不同的后续版本被认为是先前版本的修补程序 (Hotfix) 更新。

2. 版本号管理策略

1). 项目初版本时,版本号可以为 0.1 或 0.1.0, 也可以为 1.0 或 1.0.0.

2). 当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;

3). 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;

4). 当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1;

5). 另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。

3. 项目中埋入版本信息

针对每个服务,新建一个version的包用于版本管理,手动更改编译脚本中的版本号.且该版本号必须和gitlab上的版本号一一对应. 当执行二进制程序的并输入-v参数时则输出该程序的版本号,不输入任何参数时则运行程序.

4.示例

示例见https://github.com/g4zhuj/ver...
使用时使用build脚本编译即可生成带有提交信息的程序,需要根据程序修改build脚本中参数.

执行后产生的结果如下:

./example -v
Version: 0.0.1
Git commit: de07491
Go version: go version go1.6.2 linux/amd64
Build time: 2017-05-11 16:20:27

参考

https://golang.org/cmd/link/


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:沐风

查看原文:golang程序版本管理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1503 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传