【问题标题】:How to track down where a dependency comes from in Go modules?如何追踪 Go 模块中依赖项的来源?
【发布时间】:2019-10-30 02:41:05
【问题描述】:

我有一个 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 依赖项的“错误导入”发生在哪里,以便我可以更新该模块的版本?

【问题讨论】:

  • 运行 go mod tidy 以删除未使用的依赖项。之后还会出现吗?
  • 好久没看到这个了,你用的是go1.13吗?
  • go mod tidy 之后仍然出现,我使用的是 Go 1.12。

标签: go go-modules


【解决方案1】:

我能够通过运行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 运行没有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多