2015-09-08 53 views
2

這裏時,包含鏈接標誌的字符串值空間是測試代碼m.go:如何使用去建立

package main 

var version string 

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

如果我編譯和鏈接一起去1.5:

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

工作正常。

但是,如果使用建立命令去1.5:

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和build 1.5的源代碼,對於ldflags部分,看起來沒有什麼變化。因爲我可以使用一些空間字符替換空間然後在程序中將其改回,但是爲什麼?有什麼我錯過了嗎?什麼是正確的語法使用-ldflags?由於

回答

9

documentation

注意圍棋1.5之前,這個選項了兩個獨立的參數。
現在它需要在第一個=符號上拆分一個參數。

括在引號整個參數:

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

例如用日期,用於將構建時可變'''去建立-ldflags「-X 'main.buildtime = $(日期-u' +% Y-%m-%d%H:%M:%S')'「''' – xorpaul