背景

        大型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渲染。可以使用WebgraphvizOnline FlowChart & Diagrams Editor - Mermaid Live Editor

依赖关系图渲染如下:

各个自定义包的依赖关系清晰可见

放大查看依赖细节

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐