如何追踪 Go 模块中依赖的来源?
How to track down where a dependency comes from in 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
依赖项的 'mis-import' 发生的位置,以便我可以更新该模块的版本?
我能够 'patch' 这个问题 运行 go get github.com/sourcegraph/go-diff
并在我尝试的模块中添加这个替换指令(参见 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
运行没有错误。
我有一个 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
依赖项的 'mis-import' 发生的位置,以便我可以更新该模块的版本?
我能够 'patch' 这个问题 运行 go get github.com/sourcegraph/go-diff
并在我尝试的模块中添加这个替换指令(参见 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
运行没有错误。