为了便于查看go项目中各package的引用关系,更好的理解项目架构,写了一个分析package引用关系的脚本;用于将引用关系转化为dot语言,配合graphviz可将引用关系可视化。

  展示效果如下图所示:

  图中每个方块表示一个package,头部是package名称,头部以下部分是该package导入的其他package名称;可以看出main package导入了config,routers,service等几个package;routers package又导入了middleware,api,gin几个package...整个软件的层级一目了然。

 

使用方法也比较简单:

1.以go工程目录作为参数,执行analysis_golang_package.py脚本(脚本内容见下文附录),注意目录需要用英文单引号包括起来。python脚本执行后会输出dot语言脚本。

2.使用graphviz将步骤1中生成的dot语言脚本绘制成图形;若本地未安装graphviz可尝试使用在线版,地址为:http://dreampuf.github.io/GraphvizOnline(偶尔会无法访问)。

 

其他问题:比如cluster package中导入了两个package:k8s.io/api/core/v1和k8s.io/apimachinery/pkg/apis/meta/v1,由于分析脚本只取了/分隔符后最后一个字符串最为package名称,因此绘图时只能看到一个被导入的package(v1),但不影响其余大多数package引用关系的分析。

 完!

 

附录A: analysis_golang_package.py源码

 

 附录B:执行analysis_golang_package.py脚本生成的dot语言脚本示例