当使用go构建时,如何在链接标志的值字符串中包含空间



测试代码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

最新更新