golang在编译时用ldflags设置变量的值

OldGong · · 813 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

转载请注明出处,原文链接http://tailnode.tk/2017/01/go...

我们经常会在一些程序的输出中看到程序版本、编译时间、Git的commit id等信息,比如docker

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,官方解释如下

    -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 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必须使用引号括起来

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

Sun Feb 12 00:13:27 CST 2017

go version go1.7.5 linux/amd64

本文来源


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:OldGong

查看原文:golang在编译时用ldflags设置变量的值

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

813 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传