使用go build时如何在链接标志的值字符串中包含空格 [英] How to contain space in value string of link flag when using go build

查看:127
本文介绍了使用go build时如何在链接标志的值字符串中包含空格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是测试代码m.go:

 包主

var版本字符串

func main(){
println(ver =,version)
}

如果我编译并链接到1.5:

  go工具编译m.go 
转到工具链接-om -X main.version =abc 123mo

正常工作。 / p>

但是如果我使用build 1.5命令:

  go build -om -ldflags'-X main.version =abc 123'm.go 

它会显示帮助信息,这意味着什么错误



如果我更改为1.4语法:

  go build -om -ldflags'-X main.versionabc 123'm.go 

它的工作原理除了一个警告信息外:

  link:warning:option -X main.version abc 123可能无法工作未来版本;使用-X main.version = abc 123 

如果参数值没有空格,

  go build -om -ldflags'-X main.version = abc123'm.go 

因为编译和链接工作正常,所以我认为它不是链接部分问题。
我比较了go1.4和go 1.5的构建源代码,对于ldflags部分,看起来没有任何变化。因为我可以使用一些空间字符替换空间然后在程序中将其改回,但是为什么?有什么我错过了吗?什么是正确的语法使用-ldflags?谢谢 >>文档:


请注意,在Go 1.5之前,此选项有两个单独的参数。

Now

用引号将整个参数括起来:

  go build -om -ldflags'-Xmain.version = abc 123'm.go 


Here is test code m.go:

package main

var version string

func main() {
    println("ver = ", version)
}

If I compile and link with go 1.5:

go tool compile m.go
go tool link -o m -X main.version="abc 123" m.o

Works fine.

But if I use build command with go 1.5:

go build -o m -ldflags '-X main.version="abc 123"' m.go

It will show help message, which means something wrong

If I change to 1.4 syntax:

go build -o m -ldflags '-X main.version "abc 123"' m.go

It works except a warning message:

link: warning: option -X main.version abc 123 may not work in future releases; use -X main.version=abc 123

If it has no space in parameter value, works fine:

go build -o m -ldflags '-X main.version=abc123' m.go

Because compile and link works fine, So I think it is not link part issue. I compared go1.4 and go 1.5 source code of build, for ldflags part, looks nothing changed. Of cause I can use some spacial char to replace space then in program to change it back, but why? Is there something I missed? What is the right syntax to use -ldflags ? Thanks

解决方案

From the documentation:

Note that before Go 1.5 this option took two separate arguments.
Now it takes one argument split on the first = sign.

Enclose the entire argument in quotes:

go build -o m -ldflags '-X "main.version=abc 123"' m.go

这篇关于使用go build时如何在链接标志的值字符串中包含空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆