为什么go list-m命令列出我的项目中一些未使用的模块?

为什么go list-m命令列出我的项目中一些未使用的模块?,go,glide-golang,Go,Glide Golang,执行列表-m all命令: $ go list -m all |grep rsc rsc.io/pdf v0.1.1 rsc.io/quote/v3 v3.1.0 rsc.io/sampler v1.3.0 但是我的项目不依赖于rsc.io/sampler $ go mod why -m rsc.io/sampler # rsc.io/sampler (main module does not need module rsc.io/sampler) 因为这取决于它 通过拉入一个依赖项,您

执行列表-m all命令:

$ go list -m all |grep rsc
rsc.io/pdf v0.1.1
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.0

但是我的项目不依赖于rsc.io/sampler

$ go mod why -m rsc.io/sampler
# rsc.io/sampler
(main module does not need module rsc.io/sampler)

因为这取决于它

通过拉入一个依赖项,您又可以拉入它的所有依赖项

至于
主模块不需要…
行,这将在
go help mod why
帮助文本中解释:

如果包或模块未从主模块引用,则 节将显示一个带括号的注释,指示该事实


当来自
go mod why
的信息似乎不完整时,请尝试使用
go mod graph
查看完整的依赖关系图。

但是#go mod why#命令告诉您不需要该模块,原因是什么?因为“主模块”(您的模块;又名您的代码;又名您正在编写的模块)不需要
rsc.io/sampler
。但是,您的模块(也称为主模块)使用的其中一个模块,
rcs.io/quote/v3
,确实需要它。它是依赖项的依赖项,这就是为什么您的模块在技术上不需要它。@MattOestreich,
go mod why
的全部要点是显示可传递的依赖项。从
go help mod why
(重新表述为-m标志):“why在导入图中显示了从主模块到[列出的每个模块的任何包]的最短路径。”帮助文本还包括可传递依赖项的示例输出。@Peter我遗漏了什么吗?我不太明白。我很想相信我已经知道你所说的,但是你所说的事实让我觉得我在这里遗漏了一些东西。@MattOestreich,我希望
mod why
显示到rsc.io/sampler的路径,而不是“主模块不需要模块rsc.io/sampler”,即使主模块只是间接依赖于它。我检查了一个我自己的模块,它的行为是这样的。答案和你的评论都不能解释为什么在这种情况下没有。