测试代码m.o go:
package main
var version string
func main() {
println("ver = ", version)
}
如果我编译并链接到go 1.5:
go tool compile m.go
go tool link -o m -X main.version="abc 123" m.o
工作好。
但是如果我使用go 1.5的build命令:
go build -o m -ldflags '-X main.version="abc 123"' m.go
它将显示帮助消息,这意味着有错误
如果我更改为1.4语法:
go build -o m -ldflags '-X main.version "abc 123"' m.go
除了一个警告消息,它可以工作:
link: warning: option -X main.version abc 123 may not work in future releases; use -X main.version=abc 123
如果参数值中没有空格,则正常工作:
go build -o m -ldflags '-X main.version=abc123' m.go
因为编译和链接工作良好,所以我认为这不是链接部分的问题。我比较了go1.4和go 1.5的源代码构建,对于ldflags部分,看起来没有什么变化。当然我可以用一些特殊字符来代替空格然后在程序中把它改回来,但是为什么呢?我错过什么了吗?使用-ldflags的正确语法是什么?由于
来自文档:
注意,在Go 1.5之前,这个选项有两个单独的参数。现在它接受一个参数,在第一个=号上分割。
将整个参数用引号括起来:
go build -o m -ldflags '-X "main.version=abc 123"' m.go