教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang在编译时用ldflags设置变量的值

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

发布时间:2023-01-01   编辑:jiaochengji.com
教程集为您提供golang在编译时用ldflags设置变量的值等资源,欢迎您收藏本站,我们将为您提供最新的golang在编译时用ldflags设置变量的值资源

转载请注明出处,原文链接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)
}

用如下命令编译,注意因为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.0
Sun Feb 12 00:13:27 CST 2017
go version go1.7.5 linux/amd64
到此这篇关于“golang在编译时用ldflags设置变量的值”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
GO调用C函数
运行configure时,提示找不到包含文件(include fi
go 语言环境搭建
golang的makefile编写
Go语言的特性
【Golang源码分析】Golang如何实现自举(一)
golang 以及 go SDK 交叉编译
同一台服务器上安装两个mysql的教程
Apache开启gzip压缩模块
测试在apache上开启gzip

[关闭]
~ ~