它会给出一条从主模块到目标模块的依赖路径,比直接翻完整的 go mod graph 更容易看。环境:Go 1.16+,目标模块需要出现在当前构建列表里;如果提示没有依赖关系,可以再检查当前分支的 go.mod 和构建标签。想看完整图时再用 go mod graph,这个命令本身只读取模块信息,不会改文件。
这个命令排查“谁把它带进来”很顺手。补一个容易混淆的点:go mod why -m 看的是模块为何被主模块需要;如果想追到具体包,可以试试 go mod why example.com/some/module/pkg。另外,带 -vendor 或特定构建标签时,实际依赖路径可能和默认构建不同,最好在和 CI 一致的参数下复现。
这个命令排查“谁把它带进来”很顺手。补一个容易混淆的点:go mod why -m 看的是模块为何被主模块需要;如果想追到具体包,可以试试 go mod why example.com/some/module/pkg。另外,带 -vendor 或特定构建标签时,实际依赖路径可能和默认构建不同,最好在和 CI 一致的参数下复现。
再补一个配套命令:go mod why 解决的是“为什么需要它”,如果还想确认最终解析到哪个版本和本地目录,可以看: