golang程序版本管理
来源:互联网 发布:感情 知乎 编辑:程序博客网 时间:2024/06/16 15:21
版本管理主要用于对运行程序的版本追踪,从而可以管理线上服务的运行版本,避免各个版本的服务程序混淆.这里通常的做法为在程序中埋入版本标志,同时该版本号会对应到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/version-management-example
使用时使用build脚本编译即可生成带有提交信息的程序,需要根据程序修改build脚本中参数.
执行后产生的结果如下:
./example -vVersion: 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/
- golang程序版本管理
- 程序软件版本管理
- golang cgi调用golang 程序
- IOS 程序的版本管理(基于SVN)
- Golang 工程自管理
- golang手动管理内存
- Glide管理Golang项目
- golang-context(上下文管理)
- golang内存管理
- Golang 代码程序案例
- golang: 使用 delve 调试 golang 程序
- golang版本快速排序实现
- golang 各版本下载地址
- 在线接口管理 angular2 + golang
- 程序开发中版本管理之命名规则及格式
- 程序开发中版本管理之命名规则及格式
- 程序开发中版本管理之命名规则及格式
- Golang的包管理、项目管理
- C++内存分布与虚指针
- python线程池库threadpool使用实例
- Android 微信Tinker三分钟接入七分钟原理 让你成为热修复牛人
- java以某一编码方式读取CSV
- 机器学习实战笔记(二)
- golang程序版本管理
- buffer cache 深度解析
- 机器学习实战笔记
- 源码解读android 5.0控件TabLayout无法自定义下划线宽度问题
- 优先级队列---使用堆
- 蒟蒻养成记——奇妙的构图+记忆化搜索
- Centos6.5搭建vsftpd,并配置用户和密码登录
- [noip 2005] 等价表达式(equal)
- 流媒体传输协议系列之--RTSP协议详解