首页>>后端>>Golang->Golang实践录:生成版本号和编译时间

Golang实践录:生成版本号和编译时间

时间:2023-12-01 本站 点击:0

本文介绍如何在 Golang 中生成和管理版本号及编译时间。

一、起因

笔者手上有几份祖传代码,最早一份90年代末写,次早是 2012 年写的,最新的代码,也是 2016 年写的,版本号倒有,但没有版本管理,虽然看得头大,但也得看。笔者写的程序一般会添加版本号和编译日期时间,也会加上版本控制,以方便追溯和维护。对于 C/C++ 语言,有__DATE____TIME_这两个宏定义,但 Golang 没有,因此加版本号还需要额外研究一下。

二、思路

本文提供2个方法。一是通过编译时加的 ldflags 参数,对变量进行赋赋值;二是通过内嵌 C 语言函数实现。后者可以使用__DATE____TIME_,为了统一,均在脚本中生成日期,版本号亦在脚本中指定,因为在脚本中定制方便一些。

三、实现

方法1:Golang变量

准备:

Version="v1.0"BuildTime=`date+'%Y-%m-%d%H:%M:%S'`

代码:

var(BuildTimestringVersionstring)funcgetVersion1()string{returnfmt.Sprintf("%vbuild:%v\n",Version,BuildTime)}

编译:

GO111MODULE=ongobuild-ldflags"-X'dbtool/cmd.BuildTime=${BuildTime}'-X'dbtool/cmd.Version=${Version}'"-modvendor-odbtool.exemain.go||exit1

方法2:调用C函数

准备:

Version="v1.0"BuildTime=`date+'%Y-%m-%d%H:%M:%S'`GIT_VERSION=$Version"build:"$BuildTimeecho"Generated"$VER_FILE"forversion:"$GIT_VERSIONecho"#ifndefPROJECT_VERSION_H">$VER_FILEecho"#definePROJECT_VERSION_H">>$VER_FILEecho"">>$VER_FILEecho"#defineVERSION_NUMBER"$GIT_VERSION"">>$VER_FILEecho"">>$VER_FILEecho"#endif">>$VER_FILEecho"Jobdone!!"

代码:

/*#include<stdio.h>#include"version.h"char*GetVersion(){staticcharbuffer[64]={0};//代码中指定版本信息snprintf(buffer,64,"%sbuild:%s%s\r\n","v1.0",__DATE__,__TIME__);//由脚本生成到文件//snprintf(buffer,64,"%s\r\n",VERSION_NUMBER);returnbuffer;}*/import"C"//注:以上代码必须放到Goalng正式语句之前,且import"C"后必须空一行funcgetVersion()string{name1:=C.GetVersion()name:=C.GoString(name1)returnfmt.Sprintf("%v",name)}

编译:

GO111MODULE=ongobuild-modvendor-odbtool.exemain.go||exit1

四、测试

$./dbtool.exe--versiondbtool.exeversionv1.0build:2021-11-0423:14:58

BuildTime 使用 date 命令生成日期,可用默认的形式,如下:

$./dbtool.exe--versiondbtool.exeversionv1.0build:Nov4202123:15:30

五、维护

需在编译脚本中修改版本号,可手动修改,也可根据 SVN 或 GIT 版本迭代自动生成(散见于笔者多年前的文章)。

六、源码仓库

源码在 github 仓库: https://github.com/latelee/cmdtool


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/5852.html