go mod graph 可直观查看模块依赖关系,每行表示“依赖者 → 被依赖者”,格式为[依赖模块] [被依赖模块@版本],支持结合 grep、wc、Graphviz 等工具分析依赖数量、反向依赖及可视化,适用于排查多版本冲突、高危模块引入等问题,搭配 go mod why 可精准定位依赖链。

Go 模块的依赖关系可以通过 go mod graph 命令直观地查看。它输出的是模块之间的依赖图,每一行表示一个“依赖者 → 被依赖者”的关系。
基本用法
在项目根目录下执行:
go mod graph
输出示例如下:
github.com/user/project golang.org/x/text@v0.3.7 github.com/user/project github.com/pkg/errors@v0.9.1 golang.org/x/text@v0.3.7 golang.org/x/tools@v0.6.0
这说明你的项目依赖了 x/text 和 errors,而 x/text 又依赖了 x/tools。
立即学习“go语言免费学习笔记(深入)”;
理解输出结构
每行格式为:
[依赖模块] [被依赖模块@版本]
注意:这里的“依赖模块”不一定是你的主模块,也可能是间接依赖的中间模块。
整个图是有向图,可能存在多条路径指向同一个模块,也就是多个上级依赖了同一个下游模块。
结合工具分析复杂依赖
原始输出是文本形式,适合用命令行工具进一步处理。常见做法:
- 统计依赖数量: go mod graph | wc -l
- 查找某个模块被谁依赖: go mod graph | grep '@v1.2.3'
- 找出指定模块的所有上游(反向依赖): go mod graph | reverse-deps golang.org/x/text@v0.3.7 (需自行编写脚本或使用如 awk 处理)
- 可视化依赖图(配合 Graphviz): go mod graph | sed 's/@[^ ]*//g' | dot -Tpng -o dep.png 先去除版本号便于显示,再生成图片。
实用建议
当你遇到以下情况时,可以用 go mod graph 辅助排查:
- 两个不同版本的同一模块同时存在,想查清来源
- 发现某个废弃或高危模块被引入,但不确定是谁带进来的
- 优化依赖,减少冗余或降级不必要的传递依赖
搭配 go mod why 使用效果更好。比如先用 graph 发现异常依赖,再用 why 查看具体引用链。
基本上就这些。不复杂但容易忽略。熟练使用能快速理清模块间关系。










