我目前正在开发一个小型Go应用程序,我希望设置一个特定的变量(比如Version,GitCommit,BuildID...etc)。在构建或运行时(使用go build或go run)使用-ldflags选项。
因为在我的公司中,我们有几个基础相同的项目,所以我决定在一个单独的"info“模块中提取这些变量的代码,这个模块可以在每个项目中导入。
我的问题是,假设我像这样运行这个应用程序:
go run -ldflags "-X git.mycompany.com/utils/info.Version=1.0.0" app.go
这很好,并且变量的设置是正确的,即使变量不是“主”应用程序的一部分,而是一个依赖项。
然后我决定部署这个应用程序,所以我使用了新的dep工具来生成vendor文件夹。因此,"info“依赖项现在位于:vendor/git.mycompany.com/utils/info中。
现在,当我运行上面相同的命令时,就不再设置上述变量(Version)了。
我是不是漏掉了什么?一旦我删除供应商文件夹,一切都正常。这就像这个供应商文件夹与-ldflags选项或其他东西相冲突。
提前感谢!
发布于 2018-10-23 13:16:22
我们也遇到了同样的问题,经过大量的研究,我们偶然发现了评论 to GitHub问题的解决方案:cmd/link:-X不适用于销售包。
解决方案:应该指定完整的路径名,相对于$GOPATH。
它在开发git.mycompany.com/utils/info时工作,因为完整的路径是正确的。
因为从到$GOPATH的完整路径类似于git.mycompany.com/name-of/package/vendor/git.mycompany.com/utils/info.Version=1.0.0,所以它不适用于临时依赖项
不幸的是,似乎没有关于这一问题的任何文件(关于这个问题的更多信息),但正如Dave在评论中指出的那样:
这是语言实现方式的副作用。
https://stackoverflow.com/questions/50647339
复制相似问题