build go app auto version by git

有时候总是苦于版本的编号问题,借助于 git 版本控制中的信息可以很好的用于程序的版本识别,有了 hash 值还可以做其它事。
要点
* 借住-ldflags -X更改程序中的定义的变量的值,
* 通过 shell 命令获取当前时间 和 当前 git 项目中的 hash 值

代码如下:

package main

import (
	"fmt"
	"os"
)

var buildstamp string
var githash string

func main() {
	println("version demo")
	if len(os.Args) > 1 && (os.Args[1] == "--version" || os.Args[1] == "-v") {
		fmt.Printf("build at: %s\n", buildstamp)
		fmt.Printf("githash: %s\n", githash)
	}

}

编译:

go build -ldflags "-X main.buildstamp `date -u '+%Y-%m-%d_%I:%M:%S%p'` -X main.githash `git rev-parse HEAD`" versionDemo.go

运行结果如下:

./versionDemo -v
version demo
build at: 2015-08-07_04:22:19PM
githash: 59b8519d5ef37e98c99aadaee6a6eab7af7faa0a

源于:Golang Auto Build Versioning

2015-08-08