..

golang添加编译版本信息

在很多程序中,我们都能看到编译的版本信息

[jukay@mac-pro]~/Code/Go/src/github.com/hellojukay/test$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

这里的版本信息应该不是在代码里面写死的,而是在编译过程中动态生成。这里介绍一下golang怎么在编译时候加上版本信息,我们的代码如下:

package main

import (
	"flag"
)

var version string

func init() {
	var printVersion bool
	flag.BoolVar(&printVersion, "version", false, "print program build version")
	if !flag.Parsed() {
		flag.Parse()
	}
	if printVersion {
		println(version)
	}
}
func main() {
}

编译时期注入main包的version变量的值

mac-pro:test jukay$ go build -ldflags "-X main.version=v1.0" main.go
mac-pro:test jukay$ ./main --version
v1.0
mac-pro:test jukay$

这里 ./main --version等价于./main --version=true