来自ld 的文档:
-X 符号值
设置否则未初始化的字符串变量的值。符号名称应采用 importpath.name 格式,如“go tool nm”打印的符号表中所示。
所以这很酷。它允许你做这样的事情:
package main
import "fmt"
var version string
func main() {
fmt.Println(version)
}
编译: go build -ldflags '-X main.version 42' ...
我有两个关于他的功能的问题。首先,它也适用于已初始化的字符串(例如var version = "bad build"),即使文档特别指出“否则未初始化的字符串变量”。
第二个问题是关于空格的。我的Makefile包含以下几行:
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null)
LDFLAGS := '-X main.version "$(GIT_BRANCH) $(GIT_COMMIT)"'
该命令的文档go说:
-ldflags 'flag list'
所以他们对所有链接器标志使用单引号。但是一个包含空格作为标志符号的字符串-X呢?双引号工作得很好,所以转义单引号也是如此,我只是不确定我是否可以依靠所有这些来始终如一地工作,因为文档没有提到任何一个。
澄清第一个问题:
Go 对所有变量进行零初始化。
文档说:-X symbol value Set the value of an otherwise uninitialized string variable [...]。
这是否意味着:
var foo string // only this one?
var bar = "bar" // or this one too, maybe
相关分类