把版本号注入到go应用里面

简介

分享一下如何把版本号,注入到go应用里面,这样应用它在某个位置,比如底部,就可以展示 power by bsmi kb  v1.3.0 2021-07-16 14:59 之类的信息

git 加go generate 法力无边

 

对,没错,我们就是借助于git来打tag,tag就是版本号, 然后go generate可以在go build之前执行,你可以把一些变量,通过go generate 调用预处理,写入到一个go文件。然后这个go文件,会被go build 引入,并构建到你最终的应用里面。

我们的项目源代码目录下面,建一个cmd目录,里面放一个工具文件,代码如下

package main

import (
	"fmt"
	"github.com/cnmade/bsmi-kb/pkg/common"
	"io/ioutil"
	"os/exec"
	"strings"
)

func main() {
	output, _ := exec.Command("git", "describe", "--tags", "--abbrev=0").Output()

	theVersion := strings.Trim(string(output), "\n")
	fmt.Println(theVersion)
	_ = ioutil.WriteFile("./public/version.js", []byte(theVersion), 0755)

	var tmplStr = `package version

	var BuildTag  = "%s"
	var BuildNum  = "%s"
	`
	outStr := fmt.Sprintf(tmplStr, theVersion, common.GetMinutes())
	_ = ioutil.WriteFile("./pkg/version/version.go", []byte(outStr), 0755)
}

然后我们项目的main.go里面,写上go generate的注解

//go:generate go run cmd/version_info.go
func main() {
//....
}

然后我们需要展示版本号的地方,直接引用,并打印就行了

	version_bytes, _ := ioutil.ReadFile("./public/version.js")
	common.BsmiKbVersion = string(version_bytes)

是不是完美了?

分类: 默认 标签: 发布于: 2021-07-16 16:18:02, 更新于: 2021-07-16 16:18:02