使用go build时如何在链接标志的值字符串中包含空格
以下是测试代码m.go:使用go build时如何在链接标志的值字符串中包含空格,go,Go,以下是测试代码m.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 build -o m -ldflags '-X main.version="abc 123"' m.go 很好 但是如果我在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 build -o m -ldflags '-X main.version="abc 123"' m.go
很好
但是如果我在go 1.5中使用build命令:
go tool compile m.go
go tool link -o m -X main.version="abc 123" m.o
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和go1.5构建的源代码,对于ldflags部分,看起来没有什么变化。当然,我可以使用一些空间字符来替换空间,然后在程序中将其更改回原来的位置,但为什么呢?我错过了什么吗?使用-ldflags的正确语法是什么?感谢来自以下网站的:
请注意,在Go 1.5之前,此选项有两个单独的参数。现在需要在第一个=符号上拆分一个参数 将整个参数用引号括起来:
go build -o m -ldflags '-X "main.version=abc 123"' m.go
添加构建时变量的日期示例
go build-ldflags“-X”main.buildtime=$(日期-u'+%Y-%m-%d%H:%m:%S')”