← 中文资源

简体中文版本

Go 报 inconsistent vendoring 错误

通过让 vendor 目录与 go.mod 同步或显式关闭 vendoring,修复不一致的 vendoring 错误。

阅读英文原文

症状

构建失败并报 inconsistent vendoring,指出某模块在 vendor 目录中缺失或多余。vendor 目录是依赖的快照,因此任何对 go.mod 或 go.sum 的改动若不重新生成它,就会让两者不同步。CI 常在未同步 vendor 的依赖更新后如此失败。

诊断

读取不一致的模块名;用 go mod tidy 加 go mod vendor 重新生成;或显式决定是否使用 vendoring。

go build ./... 2>&1 | head -20

根因

构建使用了 vendor 目录,而 go.mod 与 go.sum 描述的依赖集合不同,以致 vendored 源码与构建预期不符。

修复

依赖变更后运行 go mod vendor 使 vendor 与 go.mod 一致;若不打算 vendoring,则删除该目录并保持构建模式不强制 -mod=vendor。

验证

重新构建并跑测试确认不一致消失,并确认 vendored 依赖版本与 go.mod 一致。快照与模块文件一致即证明修复。

常见陷阱

手动编辑 vendor 目录会与下次生成冲突;应始终通过 go mod vendor 重生成。