"inconsistent vendoring" 在 Go 中是什么意思?

What does "inconsistent vendoring" mean in Go?

我遇到了这个不一致的供应商错误,我是一个完全的 Go 新手。任何人都可以向我解释 go.mod 如何与 vendor/modules.txt 交互吗?我发现 很有帮助,现在我想知道我是否应该拥有一个供应商目录。 运行 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.modvendor/modules.txt(如果存在)必须同步。

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

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

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

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

只是添加到@rustyx 的回答中,为了修复此错误,我删除了 vendor 文件夹,然后我再次运行 go mod vendor,错误消失。

对我来说,更新版本解决了这个问题。我是 运行ning go1.16,我更新到 go1.18.2。在更新之前,我尝试去 mod vendor 并且更新 modules.txt 也没有用,我开始通过 运行ning 忽略 vendor 目录 go build -mod=mod 构建应用程序或 go 运行 -mod=mod main.go to 运行 main.go 文件