const ( Version = "2016-03-23 17:06:31 +0800 @c0d144f" Compile = "2016-06-05 23:29:45 +0800 by go version go1.6.2 darwin/amd64" ) ```
### 2.2. 通过 go build 的 -ldflags 参数在编译时候传入
其原理是: go tool link 提供了个 `-X` 参数,允许我们在编译构建Go程序的时候,传入自定义的值,覆盖对应的import path下的指定变量
```bash -X importpath.name=value Set the value of the string variable in importpath named name to value. Note that before Go 1.5 this option took twoseparate arguments. Now it takes one argument spliton the first = sign.
#!/bin/bash
COMMIT_HASH=`git rev-parse HEAD 2>/dev/null`
BUILD_DATE=`date`
TARGET=./bin/xxx
SOURCE=./src/main.go
go build -ldflags "-X \”main.BuildVersion=${COMMIT_HASH}\" -X \”main.BuildDate=${BUILD_DATE}\"" -o ${TARGET}${SOURCE}
对应的 version.go(文件名随意,注意package name 要跟上面的一致就好) 应该是编译前就创建好的,而赋值是编译期间直接生成在二进制文件里面,不体现在源码里面赋值。
$ cat version.gopackage main
var (
BuildDate string
BuildVersion string
)