Go 中“不一致的供应商”是什么意思?

Bee*_*Bee 5 go govendor

我遇到了这个不一致的供应商错误,而且我是一个完全的 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
)
Run Code Online (Sandbox Code Playgroud)

然后是相关的错误信息:

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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

值得一提的是,我的 go.mod 文件中的每个依赖项都会出现此错误,我只是包含了有关 redis 的依赖项。

rus*_*tyx 9

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

每当目录go.mod有变化时vendorgo mod vendor都需要运行来更新vendor目录的内容。

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

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

#gopkg.in/redis.v5 v5.2.9
## explicit
. . .
Run Code Online (Sandbox Code Playgroud)


Fah*_*ari 5

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

  • 这个对我有用。当发生“不一致的供应商”时,仅运行“go mod供应商”对我不起作用,但在删除供应商文件夹后该命令有效。 (2认同)