我有一個(gè)這樣的程序:package mainimport "fmt"var version stringfunc main() { fmt.Printf("Version %s\n", version)}我想在編譯時(shí)更改版本的值,如此處所示,所以我以這種方式構(gòu)建它(wtf.go 在 src/wtf 中):go build -ldflags "-X wtf/main.version=1.0.0.1234" wtfgo install wtf但是當(dāng)我運(yùn)行時(shí),版本是一個(gè)空字符串。我嘗試了各種版本的外殼,包名稱和路徑的不同變體。似乎go build并沒有太多地驗(yàn)證包/變量名,因?yàn)轱@然偽造的不會(huì)產(chǎn)生錯(cuò)誤。有沒有辦法找出 go 試圖修改的變量,以便解決這個(gè)問題?我正在為 Windows/amd64 使用 Go v 1.10.3。
1 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
錯(cuò)誤是你必須通過導(dǎo)入路徑指定包,而不是src
文件夾的相對(duì)文件夾。所以簡(jiǎn)單地引用你的version
變量,比如main.version
.?
所以導(dǎo)航到%GOPATH%/src/wtf
,并使用以下命令構(gòu)建它:
go?build?-ldflags?"-X?main.version=1.0.0.1234"?wtf.go
(或者如果文件夾中沒有包含其他包的源文件src/wtf
,則可以省略源文件名。)
這會(huì)將 放置wtf.exe
在當(dāng)前文件夾中。運(yùn)行它會(huì)打?。?/p>
Version?1.0.0.1234
請(qǐng)注意,這go install
不是必需的。這將構(gòu)建您的應(yīng)用程序并將可執(zhí)行二進(jìn)制文件放入%GOPATH%/bin
,但不會(huì)有設(shè)置version
!
如果要使用go install
,則必須再次提供標(biāo)志。在文件夾中運(yùn)行以下命令%GOPATH%/src/wtf
:
go?install?-ldflags?"-X?main.version=1.0.0.1234"
另請(qǐng)注意,go install
不需要您go build
先運(yùn)行,也不需要go install
先運(yùn)行go build
。
- 1 回答
- 0 關(guān)注
- 168 瀏覽
添加回答
舉報(bào)
0/150
提交
取消