go-cleanarch:实践指南

作者:袖梨 2026-09-11

面对实际交付,我看go-cleanarch的重点不在星标,而在这项能力:Go 的简洁架构验证器,例如 Go 项目中包之间的依赖关系规则和交互。实际做日常自动化时,经常会碰到输入边界、依赖和失败处理如果不清楚就很难稳定复用,所以功能列表并不能代替验证。我建议用一项范围明确的真实任务完成最小试跑,重点记录配置时间、输出质量、异常信息和维护痕迹,再与现有方案比较。整体来看,它适合愿意先做小范围验证并复查原始文档的团队拿来做对照测试,最终决定仍应回到真实结果和维护状态。

roblaszczak/go-cleanarch 项目截图 1

Golang 的清洁架构检查器

go-cleanarch was created to keep Clean Architecture rules, 就像 Go 项目中的“依赖关系规则”和“模块之间的交互”。 有关更多信息,您应该阅读 我们关于清洁架构的文章。

使用清洁架构的一些好处:

  1. 独立于框架。该架构不依赖于某些功能丰富的软件库的存在。这允许您使用此类框架作为工具,而不必将您的系统塞入其有限的约束中。 2.可测试。无需 UI、数据库、Web 服务器或任何其他外部元素即可测试业务规则。
  2. 独立于UI。 UI 可以轻松更改,而无需更改系统的其余部分。例如,Web UI 可以替换为控制台 UI,而无需更改业务规则。
  3. 独立于数据库。您可以将 Oracle 或 SQL 服务器替换为 Mongo、BigTable、CouchDB 或其他服务器。您的业务规则不绑定到数据库。
  4. 独立于任何外部机构。事实上,您的业务规则根本不了解外部世界的任何情况。

来源:清洁架构

项目架构要求

go-cleanarch assumes this files structure:

[GOPATH]/[PACKAGE_NAME]/[LAYER_NAME]

[GOPATH]/[PACKAGE_NAME]/[MODULE_NAME]/[LAYER_NAME]

例如

  • go/src/github.com/roblaszczak/awesome-app
    • 授权
      • 应用
      • 接口
    • 内容
        • 子模块1
        • 子模块2
      • 应用
      • 接口
    • 前端
      • 应用
      • 接口

允许 LAYER_NAME :

默认图层名称如下。可以设置不同的名称 通过命令行参数查看-domain/-application/-interfaces/-infrastructure 吼叫。

var LayersAliases = map[string]Layer{
    // Domain
    "domain":   LayerDomain,
    "entities": LayerDomain,

    // Application
    "app":         LayerApplication,
    "application": LayerApplication,
    "usecases":    LayerApplication,
    "usecase":     LayerApplication,
    "use_cases":   LayerApplication,

    // Interfaces
    "interfaces": LayerInterfaces,
    "interface":  LayerInterfaces,
    "adapters":   LayerInterfaces,
    "adapter":    LayerInterfaces,

    // Infrastructure
    "infrastructure": LayerInfrastructure,
    "infra":          LayerInfrastructure,
}

示例请转到 示例 目录, with 包含有效和无效架构的示例。

有关更多信息,您应该阅读 我们关于清洁架构的文章。

安装中

go install github.com/roblaszczak/go-cleanarch@latest

go-cleanarch 仅在 Linux 上进行了测试,也应该适用于 OS X。 可能它在 Windows 上运行得不好.

跑步

在当前目录下运行:

go-cleanarch

在提供的目录中运行

go-cleanarch go/src/github.com/roblaszczak/awesome-cms

如果架构无效,进程将以代码 1 退出,否则将以 0 退出。

-忽略测试

如果需要忽略go-cleanarch检查中的*_test.go文件,可以通过-ignore-tests

go-cleanarch -ignore-tests

当您在基础设施层中有内存实现时,它很有用 并且您需要测试依赖于它的应用程序服务。

-忽略包

如果由于某种原因您需要允许禁止导入,例如

github.com/roblaszczak/go-cleanarch/examples/ignore-package/appgithub.com/roblaszczak/go-cleanarch/examples/ignore-package/domain

你可以使用

go-cleanarch -ignore-package=github.com/roblaszczak/go-cleanarch/examples/ignore-package/app 

图层名称

可以使用以下参数将图层名称设置为特定值。每个 参数代表在层上。

go-cleanarch -domain dom -application appli -interfaces int -infrastructure outer

这只允许域名为 dom,应用程序必须为 appli, 接口必须是内部的,而基础设施必须是外部的。

运行测试

make test

和编码风格测试

make qa

版本控制

我们使用 SemVer 进行版本控制。有关可用版本,请参阅此存储库 上的 [标签。

相关文章

精彩推荐