如何跟踪Go模块中依赖项的来源?

时间:2019-10-29 18:16:30

标签: go go-modules

我有一个Go模块,例如github.com/myorg/mymodule,我想在其中更新另一个模块的版本。但是,如果我尝试go get -u,则会收到unexpected module path错误:

> go get -u github.com/myorg/mymodule
go: sourcegraph.com/sourcegraph/go-diff@v0.5.1: parsing go.mod: unexpected module path "github.com/sourcegraph/go-diff"
go get: error loading module requirements

此修复程序已记录在https://github.com/sourcegraph/go-diff/issues/35中:该模块需要作为github.com/sourcegraph/go-diff/diff而不是github.com/sourcegraph/go-diff导入。

问题是,我不知道在哪里应用此修复程序-也就是说,哪个依赖项以错误的方式导入了此子依赖项。

尤其是,go-diff不会出现在go.mod中,而只会出现在go.sum中(在几个不同的模块中):

> grep go-diff go.mod
> grep go-diff go.sum
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=

我尝试使用go mod why,但这只是报告不需要该模块:

> go mod why sourcegraph.com/sourcegraph/go-diff
# sourcegraph.com/sourcegraph/go-diff
(main module does not need package sourcegraph.com/sourcegraph/go-diff)

更令人困惑的是,错误消息中提到了go-diff@v0.5.1,而go.sum包含了go-diff v0.5.0

总而言之,如何跟踪go-diff依赖项的“误导入”发生的位置,以便更新该模块的版本?

1 个答案:

答案 0 :(得分:0)

我可以通过运行go get github.com/sourcegraph/go-diff并在试图更新依赖关系的模块中添加此replace指令(参见https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive)来“修补”此问题:

replace sourcegraph.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1

此后,go get -u github.com/myorg/mymodule正常运行。