2024年12月15日

使用 goplantuml 生成 Golang 项目的类图

作者 杨, 从学
内容目录

什么是 goplantuml

goplantuml 是一个面向 Golang 开发者的
工具,用于将代码的结构(包括包、结构体、接口及其关系)转化为
PlantUML 可视化类图。通过解析 Golang 源码,
goplantuml自动生成描述代码架构的 .puml 文件,帮助开发者更直观地理解项目结
构。

适合 Golang 开发者的场景

在 Golang 开发中,项目结构往往由多个包(package)和类型(如结构体、接口)组成,
随着项目规模扩大,理解代码的架构变得更加复杂。 goplantuml 的目标是通过自动化的方
式生成类图,让开发者能够:

  • 快速理解项目的模块划分和类型关系。
  • 发现潜在的依赖问题或循环引用。
  • 为团队新成员提供清晰的架构概览。
  • 辅助文档编写和代码审查。

核心功能

  • 解析 Golang 源代码:支持解析结构体、接口及它们之间的嵌套关系和依赖。
  • 生成 UML 类图:输出标准的 .puml 文件,可以直接用 PlantUML 渲染为图像。
  • 隐藏私有成员:支持 -hide-private-members 参数,仅显示导出的(public)成
    员,保护代码隐私。
  • 递归处理目录:支持递归扫描目录,分析所有相关的 Golang 源码文件。
  • 灵活的输出控制:开发者可以使用多种选项调整生成的类图细节,如排除特定的包或
    目录。

安装与使用

安装

通过 go install 命令快速安装:

go get github.com/jfeliu007/goplantuml/parser
go install github.com/jfeliu007/goplantuml/cmd/goplantuml@latest

确保 $GOPATH/bin 已添加到环境变量中。

基本用法

以下命令生成类图的 .puml 文件:

goplantuml [-recursive] path/to/gofiles path/to/gofiles2
goplantuml [-recursive] path/to/gofiles path/to/gofiles2 > diagram_file_name.puml

Usage of goplantuml:
  -aggregate-private-members
        Show aggregations for private members. Ignored if -show-aggregations is not used.
  -hide-connections
        hides all connections in the diagram
  -hide-fields
        hides fields
  -hide-methods
        hides methods
  -ignore string
        comma separated list of folders to ignore
  -notes string
        Comma separated list of notes to be added to the diagram
  -output string
        output file path. If omitted, then this will default to standard output
  -recursive
        walk all directories recursively
  -show-aggregations
        renders public aggregations even when -hide-connections is used (do not render by default)
  -show-aliases
        Shows aliases even when -hide-connections is used
  -show-compositions
        Shows compositions even when -hide-connections is used
  -show-connection-labels
        Shows labels in the connections to identify the connections types (e.g. extends, implements, aggregates, alias of
  -show-implementations
        Shows implementations even when -hide-connections is used
  -show-options-as-note
        Show a note in the diagram with the none evident options ran with this CLI
  -title string
        Title of the generated diagram
  -hide-private-members
        Hides all private members (fields and methods)

常用选项

  • -recursive:递归扫描子目录。
  • -hide-private-members:隐藏私有成员,减少输出中的噪声。
  • -ignore "<dir>":忽略特定目录,避免解析不相关的代码。

使用示例

假设项目目录如下:

project/
│
├── main.go
├── models/
│   ├── user.go
│   └── order.go
└── services/
    ├── user_service.go
    └── order_service.go

执行命令:

goplantuml -recursive ./project > diagram.puml

生成的类图可以清晰展示 modelsservices 包中的依赖关系,以及结构体之间的嵌
套和接口实现。

体验

可以通过 dumels 在线体验这个工具。

优势与局限

优势

  • 快速直观:适合中大型项目的架构分析。
  • 自动化:省去手动绘制图表的繁琐步骤。
  • 社区支持:开源项目,活跃的开发与问题跟踪。

局限

  • 不支持动态依赖:工具仅解析静态代码,无法捕获运行时动态关系。
  • 复杂性限制:对于特别大的项目,生成的类图可能过于复杂,建议分模块生成。

总结

goplantuml 是 Golang 开发者的优秀辅助工具,为代码架构的可视化和理解提供了强有力
的支持。如果你正在开发一个 Golang 项目并希望更直观地呈现其架构,不妨试试
goplantuml.

项目主页:goplantuml GitHub