gpt4 book ai didi

go - 使用 ldflags 设置 Go 变量与 vendor 文件夹冲突

转载 作者:IT王子 更新时间:2023-10-29 01:14:31 26 4
gpt4 key购买 nike

我目前正在开发一个小型 Go 应用程序,我想在构建或运行时(使用 go buildgo run) 通过使用 -ldflags 选项。

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

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

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

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

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

现在,当我运行与上面相同的命令时,不再设置所述变量(Version)。

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

提前致谢!

最佳答案

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

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

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

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

this is a side effect of the language way vendoring is implemented

关于go - 使用 ldflags 设置 Go 变量与 vendor 文件夹冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50647339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com