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
在Golang应用程序中,如何将版本嵌入main以外的其他包中?_Go_Version_Auto Versioning - Fatal编程技术网

在Golang应用程序中,如何将版本嵌入main以外的其他包中?

在Golang应用程序中,如何将版本嵌入main以外的其他包中?,go,version,auto-versioning,Go,Version,Auto Versioning,受此启发,我想使用相同的机制在我的golang应用程序中嵌入一个版本号。但是,我使用的是命令行解析器,希望有一个version子命令。这将导致以下目录和包结构: . |-- cmd `-- version.go |-- main.go

受此启发,我想使用相同的机制在我的golang应用程序中嵌入一个版本号。但是,我使用的是命令行解析器,希望有一个
version
子命令。这将导致以下目录和包结构:

.
|-- cmd                                                                   
`-- version.go                                                    
|-- main.go                                                           
到目前为止,我已经尝试了以下方法:

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

-

包含变量声明的
version.go
,如:

var versionString string

分别

我还尝试将变量声明放在
main.go
中,但是我不清楚如何在
version.go
中引用变量。对于我尝试的此选项:

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

在这两种情况下,编译器都抱怨
psiw
main
分别是未知的。 请注意,在
main
中使用
VersionString
,可以得到预期的结果

我更喜欢链接标志指向
version
包中的变量的解决方案,因为它们不需要反向指针。但是,任何建议都是欢迎的。

看看这些建议,我已经找到了问题的答案。诀窍是使用:

go run -ldflags "-X github.com/basbossink/psiw/cmd.versionString=0.1.0" main.go version
所以我犯了两个错误:

  • 我混淆了包和源文件的概念,
    version.go
    文件的包语句是
    package cmd
  • 引用变量的方法是使用完全限定名
看着这本书,我已经找到了问题的答案。诀窍是使用:

go run -ldflags "-X github.com/basbossink/psiw/cmd.versionString=0.1.0" main.go version
所以我犯了两个错误:

  • 我混淆了包和源文件的概念,
    version.go
    文件的包语句是
    package cmd
  • 引用变量的方法是使用完全限定名
import "github.com/basbossink/psiw"
....
fmt.Println(psiw.VersionString)
import "github.com/basbossink/psiw/main"
...
fmt.Println(main.VersionString)
go run -ldflags "-X github.com/basbossink/psiw/cmd.versionString=0.1.0" main.go version