项目介绍:go-structurizr
概述
go-structurizr 是一个用于从 Go 代码中自动生成 C4 组件图的库,它提供工具(Scraper 和 View)来提取和呈现 Go 结构体,并生成以 PlantUML 格式展示的 C4 组件图。
特点与优势
go-structurizr 能够根据接口、预定义规则和配置,识别和反映代码中的结构。您可以将其与 model.HasInfo
接口实现以及符合特定规则的类型一起使用,从而高效地生成清晰的架构视图,帮助开发者直观理解和展示系统结构。
核心组件
组件信息
在被提取的代码结构中,model.Info
定义了组件的信息:
Kind
:组件类型Name
:组件名称Description
:组件描述Technology
:组件中使用的技术Tags
:用于匹配视图样式的标签
Scraper
Scraper 组件允许开发者通过代码或 YAML 文件来实例化,并根据指定的包前缀和规则进行结构提取。规则包括包正则表达式、名称正则表达式和应用函数,从而定义哪些类型会被处理,以及如何生成相应的组件信息。
使用示例
通过代码设置:
config := scraper.NewConfiguration("github.com/org/pkg")
s := scraper.NewScraper(config)
通过 YAML 文件配置:
# go-structurizr.yml
configuration:
pkgs:
- "github.com/org/pkg"
rules:
- name_regexp: "^.*Client$"
pkg_regexps:
- "github.com/org/pkg/foo/.*"
component:
description: "foo client"
technology: "gRPC"
tags:
- TAG
View
View 组件用于呈现提取到的结构体,可以通过代码或 YAML 文件初始化,定义标题、组件样式、额外样式和组件标签等。视图可以根据标签过滤和组织组件,以便生成更加聚焦和有意义的架构图。
使用示例
通过代码设置视图:
v := view.NewView().
WithTitle("Title").
WithComponentStyle(
view.NewComponentStyle("TAG").
WithBackgroundColor(color.White).
WithFontColor(color.Black).
WithBorderColor(color.Black).
WithShape("database").
Build(),
).
WithComponentTag("TAG").
WithRootComponentTag("ROOT").
Build()
通过 YAML 文件配置视图:
# go-structurizr.yml
view:
title: "Title"
line_color: 000000ff
styles:
- id: TAG
background_color: ffffffff
font_color: 000000ff
border_color: 000000ff
shape: database
root_component_tags:
- ROOT
component_tags:
- TAG
使用最佳实践
- 确保应用程序上下文设计良好,采用清晰的架构模式,以降低生成图表的复杂性并提高可读性。
- 保持一致的命名规范,以简化和明确 Scraper 规则的应用。
调试模式
若要启用详细的日志记录,可以将 LOG_LEVEL
环境变量设置为 debug
或 DEBUG
,方便排查和优化提取与渲染过程。
结语
go-structurizr 是帮助开发者自动化生成和管理系统架构图的强大工具。通过将其与 Go 代码紧密集成,开发者不仅能够快速生成实时反映系统状态的架构图,还能确保这些图表的准确性和时效性。