【问题标题】:What does "inconsistent vendoring" mean in Go?Go 中的“不一致的供应商”是什么意思?
【发布时间】:2022-05-09 01:37:32
【问题描述】:

我遇到了这个不一致的供应商错误,我是个 Go 新手。谁能向我解释 go.mod 如何与 vendor/modules.txt 交互?我发现this question 很有帮助,现在我想知道我是否应该有一个供应商目录。会通过运行go mod vendor 创建吗?我继承了这个项目,它已经在 git 中有 vendor 目录。

这是我的 go.mod 文件的相关部分 -

module mymodule

go 1.17

require (
        gopkg.in/redis.v5 v5.2.9
)

然后是相关的错误信息:

go: inconsistent vendoring
gopkg.in/redis.v5@v5.2.9: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt

在 vendor/modules.txt 我有:

#gopkg.in/redis.v5 v5.2.9
gopkg.in/redis.v5
gopkg.in/redis.v5/internal
gopkg.in/redis.v5/internal/consistenthash
gopkg.in/redis.v5/internal/hashtag
gopkg.in/redis.v5/internal/pool
gopkg.in/redis.v5/internal/proto

对于我的 go.mod 文件中的每个依赖项,我都得到了这个错误,我只是包含了一个关于 redis 的错误。

【问题讨论】:

  • “我是个 Go 新手”所以最好的建议是:不要使用 vendoring。

标签: go govendor


【解决方案1】:

go.modvendor/modules.txt(如果存在)必须同步。

每当go.mod 发生变化并且有vendor 目录时,就需要运行go mod vendor 来更新vendor 目录的内容。

从 Go 1.14 开始,所有直接依赖项(在 go.mod 中未标记为 // implicit)都是“显式”的,并在 vendor/modules.txt 中进行了相应标记。

运行go mod vendor 后,请注意包引用后添加的新行## explicit

#gopkg.in/redis.v5 v5.2.9
## explicit
. . .

【讨论】:

    【解决方案2】:

    只是为了补充@rustyx的答案,为了修复这个错误,我删除了vendor文件夹,然后我再次运行go mod vendor,错误就消失了。

    【讨论】:

    • 它对我有用。当inconsistent vendoring 发生时,仅运行go mod vendor 对我不起作用,但在我删除供应商文件夹后该命令起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多