Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用go build时如何在链接标志的值字符串中包含空格_Go - Fatal编程技术网

使用go build时如何在链接标志的值字符串中包含空格

使用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

以下是测试代码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 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')”