【问题标题】:Set Go variable with ldflags conflicts with vendor folder使用 ldflags 设置 Go 变量与供应商文件夹冲突
【发布时间】:2018-11-11 19:50:37
【问题描述】:

我目前正在开发一个小型 Go 应用程序,我想通过使用-ldflags 选项。

因为在我的公司我们有几个具有相同基础的项目,所以我决定将带有这些变量的代码提取到一个单独的“信息”模块中,该模块可以导入到每个项目中。

这是我的问题,假设我正在运行这样的应用程序:

go run -ldflags "-X git.mycompany.com/utils/info.Version=1.0.0" app.go

这很好用,并且即使变量不是“主”应用程序的一部分而是在依赖项中,变量也被正确设置。

然后我决定部署应用程序,因此我使用新的dep 工具生成vendor 文件夹。 因此,“info”依赖现在位于:vendor/git.mycompany.com/utils/info

现在当我像上面一样运行 same 命令时,不再设置上述变量 (Version)。

我在这里遗漏了什么吗? 一旦我删除供应商文件夹,一切都会再次正常。这就像这个供应商文件夹与 -ldflags 选项或其他东西冲突。

提前致谢!

【问题讨论】:

    标签: go vendor godeps ldflags


    【解决方案1】:

    我们遇到了完全相同的问题,经过大量研究,我们偶然发现了a comment 到 GitHub 问题的解决方案: cmd/link: -X doesn't work for vendored packages

    解决方案:应指定相对于$GOPATH完整路径名。

    开发git.mycompany.com/utils/info时可以使用,因为完整路径是正确的。
    它不适用于 vendored 依赖项,因为来自 $GOPATH完整 路径类似于 git.mycompany.com/name-of/package/vendor/git.mycompany.com/utils/info.Version=1.0.0

    不幸的是,似乎没有关于此的文档(有关更多信息,请查看问题),但正如 Dave Cheney 在评论中指出的那样:

    这是实现 vendoring 的语言方式的副作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2018-10-07
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多