用 fork 替换 Go 依赖:“...用于两个不同的模块路径”

Jor*_*ett 3 go dependency-management git-fork go-modules

我有一个非常大的 Go 项目,依赖于github.com/golang/mock. 不幸的是,这个包不再维护,开发人员已指示人们使用位于 的 fork go.uber.org/mock。所以我想用 替换github.com/golang/mock依赖项go.uber.org/mock

据我了解,这正是 go.modreplace指令的用途(允许您替换依赖项,而不必更改每个文件中的导入路径)。因此,用 fork 替换此模块应该很简单,只需将以下行添加到 my go.mod

replace github.com/golang/mock => go.uber.org/mock v0.2.0
Run Code Online (Sandbox Code Playgroud)

不幸的是,当尝试运行任何go命令时,这会导致错误:

$ go mod tidy
...
go: go.uber.org/mock@v0.2.0 used for two different module paths (github.com/golang/mock and go.uber.org/mock)
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

如有必要,您可以在此处查看存储库/提交。

Zek*_* Lu 5

根据替换指令的文档:

无论替换是使用本地路径还是模块路径指定,如果替换模块具有 go.mod 文件,则其模块指令必须与其替换的模块路径匹配。

replace此处不能使用该指令。

由于go.uber.org/mock使用不同的模块路径发布,我认为您必须将其视为与github.com/golang/mock.