Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
81 lines (61 sloc) 1.62 KB
date title template author published thumbnail slug categories tags
2019-08-27
Go 编程: 写一个通用的项目版本信息包
post
JayL
true
../thumbnails/go.png
go-build-version
go
build
version
go
Go 编程

在Go程序的编译期设置版本信息,操作非常简单。只需要设置相应的链接选项参数即可,如:

package main

import "log"

var version = "unset"

func main(){
  log.Println("version: ", version)
}

编译期设置版本信息操作如下:

$: go run -ldflags '-X main.version=v1.0.0' main.go
version: v1.0.0

在企业项目中,版本信息常常会结合git版本信息,编译时间等相关信息。每个项目版本信息基本类似,所以有必要建立一个简单的build包,方便其它项目使用。项目地址:x-mod/build.

package build

import "fmt"

var (
	version = "dev"
	commit  = "none"
	date    = "unknown"
)

//String version
func String() string {
	return fmt.Sprintf("%v, commit %v, built at %v", version, commit, date)
}

这样在实际项目中就可以直接引用,并在编译期设置相应的版本信息。以命令行项目为例:

package main

import (
  "github.com/x-mod/build"
  "github.com/x-mod/cmd"
)

func main(){
  cmd.Version(build.String())
  cmd.Execute()
}

在编译期的编译指令如下:

$: go build -ldflags "-X github.com/x-mod/build.commit=$(git rev-parse HEAD) -X github.com/x-mod/build.date=$(date +%FT%T%z)"

有了通用包,以上代码就可以完成自动化生成,基本无需人工参与。

You can’t perform that action at this time.