为仓库级Golang项目生成自定义包依赖关系图
本文介绍了一种快速生成Golang项目包依赖关系图的方法。通过一键式脚本,可以自动分析项目中自定义包的依赖关系,并生成DOT和Mermaid格式的依赖图。脚本会先获取项目模块路径,然后列出所有包及其导入关系,筛选出内部依赖后生成可视化图表。使用方法简单,只需在项目根目录执行脚本,即可获得.dots和.mmd文件,可使用Graphviz或Mermaid进行渲染。这种方法能清晰展示各自定义包的依赖关系
·
背景
大型Golang语言项目自定义包众多,如何快速全面的查看项目中自定义包的依赖关系?能不能一键生成项目包依赖关系图?
解决方案
依赖关系图生成脚本
通过一键式脚本,快速生成golang仓库包依赖关系图,脚本内容如下
#!/usr/bin/env bash
set -euo pipefail
# usage:
# ./show-my-pkg-deps.sh [PREFIX]
# If PREFIX is omitted, the current module path (go list -m) is used.
PREFIX=${1:-$(go list -m)}
OUT_DOT=${2:-deps.dot}
OUT_SVG=${3:-deps.svg}
OUT_MMD=${4:-deps.mmd}
echo "Module/prefix = $PREFIX"
echo "Generating package edges for packages under: $PREFIX ..."
# Generate edges: list packages and their imports, then keep only edges where both src and tgt start with PREFIX
go list -f '{{.ImportPath}} {{range .Imports}}{{.}} {{end}}' ./... \
| awk -v prefix="$PREFIX" '
BEGIN { OFS=" " }
{
src=$1
for (i=2; i<=NF; i++) {
tgt=$i
if (index(src, prefix) == 1 && index(tgt, prefix) == 1) {
print "\"" src "\" -> \"" tgt "\";"
}
}
}' | sort -u > /tmp/.pkg_edges.txt
if [ ! -s /tmp/.pkg_edges.txt ]; then
echo "No internal edges found for prefix $PREFIX. Make sure you are at module root or pass correct PREFIX."
exit 0
fi
# Write DOT
cat > "$OUT_DOT" <<'DOTHEAD'
digraph G {
rankdir=LR;
node [shape=box, fontname="Arial", fontsize=10];
edge [fontsize=9];
concentrate=true;
DOTHEAD
cat /tmp/.pkg_edges.txt >> "$OUT_DOT"
echo "}" >> "$OUT_DOT"
# Write Mermaid
echo "graph LR" > "$OUT_MMD"
# convert edges to mermaid arrows
sed 's/\"//g; s/ -> / --> /; s/;$//' /tmp/.pkg_edges.txt >> "$OUT_MMD"
# Render DOT -> SVG if dot available
if command -v dot >/dev/null 2>&1; then
dot -Tsvg "$OUT_DOT" -o "$OUT_SVG"
echo "Wrote $OUT_SVG"
else
echo "Graphviz 'dot' not found; wrote $OUT_DOT and $OUT_MMD. Install graphviz to render DOT to SVG/PNG."
fi
# cleanup
rm -f /tmp/.pkg_edges.txt
echo "Outputs:"
echo " DOT: $OUT_DOT"
echo " Mermaid:$OUT_MMD"
[ -f "$OUT_SVG" ] && echo " SVG: $OUT_SVG"
使用方法
在项目根文件夹,即go.mod同级别目录下,新建deps.sh脚本,复制上述内容,并赋予执行权限,然后执行
chmod +x deps.sh
./deps.sh
执行完毕后,根文件夹新增 .dot 和 .mmd文件。分别使用Graphviz和mermaid渲染。可以使用Webgraphviz和Online FlowChart & Diagrams Editor - Mermaid Live Editor
依赖关系图渲染如下:
各个自定义包的依赖关系清晰可见
放大查看依赖细节
更多推荐
所有评论(0)