为了账号安全,请及时绑定邮箱和手机立即绑定

Can Go 的链接器覆盖初始化的变量

Can Go 的链接器覆盖初始化的变量

Go
沧海一幻觉 2021-08-16 18:30:10
来自ld 的文档:-X 符号值设置否则未初始化的字符串变量的值。符号名称应采用 importpath.name 格式,如“go tool nm”打印的符号表中所示。所以这很酷。它允许你做这样的事情:package mainimport "fmt"var version stringfunc 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
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信