golang在編譯時間用ldflags設定變數的值

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

我們經常會在一些程式的輸出中看到程式版本、編譯時間、Git的commit id等資訊,比如docker

ming@vultr:~$ docker versionClient: 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,官方解釋如下

-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.

以下面代碼說明

package mainimport "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)}

用如下命令編譯,注意因為datego version的輸出有空格,所以main.BUILD_TIMEmain.GO_VERSION必須使用引號括起來

go build -ldflags "-X main.VERSION=1.0.0 -X 'main.BUILD_TIME=`date`' -X 'main.GO_VERSION=`go version`'"

編譯成功後運行程式,結果如下

ming@ubuntu:~/go_workspace/src/test$ ./test 1.0.0Sun Feb 12 00:13:27 CST 2017go version go1.7.5 linux/amd64
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.