2016-02-10 53 views
1

this SO question的啓發我想使用相同的機制在我的golang應用程序中嵌入版本號。但是,我使用的是Cobra命令行解析器,並且希望有一個version子命令。這導致了下面的目錄和包裝結構:在Golang應用程序中,如何在除main之外的其他包中嵌入版本?

. 
|-- cmd                 
`-- version.go              
|-- main.go               

到現在爲止我已經試過如下:

go run -ldflags "-X cmd/version.versionString=0.1.0" main.go version 

-

go run -ldflags "-X version.versionString=0.1.0" main.go version 

-

go run -ldflags "-X version.VersionString=0.1.0" main.go version 

隨着version.go含有變量聲明像:

var versionString string 
分別

var VersionString string 

我也試圖把變量聲明中main.go後來我不清楚如何引用變量version.go這個選項我想:

import "github.com/basbossink/psiw" 
.... 
fmt.Println(psiw.VersionString) 

-

​​

在這兩種情況下,編譯器都會抱怨psiwmain分別是未知的。 請注意,使用main中的VersionString可獲得預期結果。

我更喜歡一個解決方案,其鏈接標誌指向version包中的變量,因爲它們不需要反指。但歡迎任何建議。

回答

3

看着Hugo source我發現了我的問題的答案。訣竅是使用:

go run -ldflags "-X github.com/basbossink/psiw/cmd.versionString=0.1.0" main.go version 

所以我犯了兩個錯誤:

  • 我混了包和源文件的概念,將version.go文件有package cmd,因爲它是包語句。
  • 引用變量的方式是使用完全限定名稱。
相關問題