go-structurizr 是一个用于从 Go 代码中自动生成 C4 组件图的库,它提供工具(Scraper 和 View)来提取和呈现 Go 结构体,并生成以 PlantUML 格式展示的 C4 组件图。
go-structurizr 能够根据接口、预定义规则和配置,识别和反映代码中的结构。您可以将其与 model.HasInfo 接口实现以及符合特定规则的类型一起使用,从而高效地生成清晰的架构视图,帮助开发者直观理解和展示系统结构。
在被提取的代码结构中,model.Info 定义了组件的信息:
Kind:组件类型Name:组件名称Description:组件描述Technology:组件中使用的技术Tags:用于匹配视图样式的标签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 组件用于呈现提取到的结构体,可以通过代码或 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
若要启用详细的日志记录,可以将 LOG_LEVEL 环境变量设置为 debug 或 DEBUG,方便排查和优化提取与渲染过程。
go-structurizr 是帮助开发者自动化生成和管理系统架构图的强大工具。通过将其与 Go 代码紧密集成,开发者不仅能够快速生成实时反映系统状态的架构图,还能确保这些图表的准确性和时效性。