轉載請註明出處,原文連接http://tailnode.tk/2017/01/go...node
咱們常常會在一些程序的輸出中看到程序版本、編譯時間、Git的commit id等信息,好比dockerlinux
ming@vultr:~$ docker version Client: Version: 1.12.5 API version: 1.24 Go version: go1.6.4 Git commit: 7392c3b Built: Fri Dec 16 02:42:17 2016 OS/Arch: linux/amd64 ...
咱們能夠提供一個配置文件version.conf
,程序運行時從version.conf
取得這些信息進行顯示。可是在部署程序時,除了二進制文件還須要額外的配置文件,不是很方便。
或者將這些信息寫入代碼中,這樣不須要額外的version.conf
,但要在每次編譯時修改代碼文件,也夠麻煩的了。
有一種更好的辦法是在編譯時使用參數-ldflags -X importpath.name=value,官方解釋以下golang
-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 two separate arguments.
Now it takes one argument split on the first = sign.docker
如下面代碼說明ubuntu
package main import "fmt" var ( VERSION string BUILD_TIME string GO_VERSION string ) func main() { fmt.Printf("%s\n%s\n%s\n", VERSION, BUILD_TIME, GO_VERSION) }
用以下命令編譯,注意由於date
和go version
的輸出有空格,因此main.BUILD_TIME
和main.GO_VERSION
必須使用引號括起來ui
go build -ldflags "-X main.VERSION=1.0.0 -X 'main.BUILD_TIME=`date`' -X 'main.GO_VERSION=`go version`'"
編譯成功後運行程序,結果以下this
ming@ubuntu:~/go_workspace/src/test$ ./test 1.0.0 Sun Feb 12 00:13:27 CST 2017 go version go1.7.5 linux/amd64