goland无一键导出依赖列表功能,需用命令行:go list -m all导出完整依赖(含版本与replace状态),go mod graph输出原始依赖边,gomodtree生成缩进树形文本供查看或重定向保存。

GoLand 里没有“一键导出依赖列表”的菜单项
GoLand 本身不提供导出文本依赖列表或关系图的按钮,所谓“一键”实际是组合命令行 + IDE 操作。你看到的“Export Dependencies”或类似选项,要么是旧版插件残留,要么是误点了 Project Structure 里的模块列表(那只是模块名,不含版本和依赖边)。
真正能导出结构化数据的,只有底层调用的 go list 和 go mod graph —— GoLand 的依赖图界面只是可视化前端,不生成可保存的原始数据。
- 右键项目 → “Show Dependencies Diagram” 只渲染当前文件/包的活跃依赖链,不包含
indirect模块,也不输出文本 - Settings → Go → Modules 页面只显示已解析的模块名和版本,无法复制或导出为 CSV/JSON
- 依赖图右上角的 “Export to PNG” 导出的是渲染快照,不是结构化数据,缩放后文字糊成一团,无法用于分析
用 go list -m all 导出完整依赖列表(含版本与 replace 状态)
go list -m all 是最接近“导出列表”的原生命令,它输出所有模块(包括间接依赖)及其版本、是否被 replace 或 exclude 影响,格式规整,可直接重定向到文件。
在 GoLand Terminal 中运行:
go list -m all > deps-all.txt
注意三点:
- 输出中带
// indirect的行表示该模块未被主模块直接 import,仅通过其他依赖引入 - 若某行末尾出现
=> ./local-fix,说明该项目用了replace,但go list会如实显示替换后路径 - 该命令不保证构建时实际加载的版本——比如
//go:build ignore的包不会出现在结果里,而go build -tags prod可能拉入不同依赖
用 go mod graph | grep 过滤并导出依赖边(适合做后续分析)
go mod graph 输出的是 A B@vX.Y.Z 格式的有向边,每行代表一个“模块 A 依赖模块 B”,这是构建依赖树的原始输入。它不处理 replace,所以输出仍是原始模块路径,这点必须手动核对。
导出主模块的直接依赖(最常用场景):
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
go mod graph | grep "^$(go list -m) " | cut -d' ' -f2 | sort -u > direct-deps.txt
导出某第三方模块(如 github.com/gin-gonic/gin)的所有上游依赖路径:
go mod graph | awk '$2 ~ /^github\.com\/gin-gonic\/gin@/ {print $1}' | sort -u > gin-upstreams.txt
容易踩的坑:
-
go mod graph包含所有间接依赖,输出可能上千行,不加grep过滤基本不可读 - 它不区分
require和indirect,也无法标出哪个replace生效了——得对照go.mod手动验证 - CI 环境首次运行时若没执行过
go mod download,部分模块可能缺失,导致边不全
gomodtree 输出带缩进的树形文本(最接近“导出依赖树”)
gomodtree 是目前唯一能输出类 tree 命令风格缩进文本的工具,支持直接重定向,结构清晰,还标注 (indirect) 和 (replace)。
安装并导出:
go install github.com/icholy/gomodtree@latest<br>gomodtree > deps-tree.txt
关键限制:
- 它依赖本地
go.sum和模块缓存;刚 clone 的项目没跑过go mod download,部分间接依赖会显示为<missing></missing> - 输出是近似树形,不是严格父子关系——同一模块被多个路径引入时,只展开一次,不重复显示分支
- 不支持按关键词过滤输出(如只导出含
sql的行),得靠外部grep配合
真正要拿去给同事看或写进文档,gomodtree > deps-tree.txt 是最省心的选择;但若要做自动化比对或 CI 检查,还是得回到 go list -m all 和 go mod graph 的原始输出——它们才是真实、可脚本化的事实来源。










