关于 solid-go
solid-go 是面向 Go 项目的模块化架构技能,规定功能目录、接口位置与规模,并提供 SOLID 参考和实现模板。适用于希望统一代码结构、复用策略和依赖注入方式的 Go 开发者。
主要功能
- 01强制按功能模块组织代码
- 02将接口限制在 ports 目录
- 03规定文件与处理器大小
- 04要求小型接口和 godoc 注释
- 05提供 SOLID 与架构参考
- 06提供模块及测试模板
适用场景
- 01规划 Go 功能模块目录
- 02拆分过大的处理器或接口
- 03新增功能前检查共享代码
- 04为服务和 HTTP 处理器搭建结构
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-go安装后在 Claude Code 中输入/solid-go确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/architecture-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/error.mdhandler.mdinterface.mdmodule.mdservice.mdtest.md详细介绍
SOLID Go 为 Go 1.27+ 强制规定模块化架构:每项功能都位于 `internal/modules/[feature]/` 下(handlers、services、repositories、ports、models),共享代码位于 `internal/core/`;接口(ports)仅放在 `ports/` 目录中,并保持精简(1-3 个方法,符合 Go 惯用写法);函数接受接口但返回结构体;每个导出的函数都必须附带 godoc 注释。
编写任何新代码之前,都必须检查 internal/core/services 和 internal/core/ports,避免重复实现。概览请参阅 solid-principles.md;SRP/OCP/LSP/ISP/DIP 的详细说明请参阅各原则对应的参考文档;六边形/模块化布局请参阅 architecture-patterns.md;模块/服务/接口/处理器/错误/测试脚手架请参阅模板。
SOLID Go - 模块化架构
Agent 工作流(强制)
任何实现开始之前,必须并行启动 3 个 Agent,每个使用一次 Agent 调用并指定一个 name:
- fuse-ai-pilot:explore-codebase - 分析现有架构
- fuse-ai-pilot:research-expert - 通过 Context7 验证 Go 文档
- fuse-ai-pilot:sniper - 实现后验证
DRY - 创建前先复用(强制)
编写任何新代码之前:
- 在代码库中使用 Grep 查找类似接口、服务或逻辑
- 检查共享位置:
internal/core/services/、internal/core/ports/ - 如果存在类似代码 -> 扩展/复用,而不是重复创建
- 如果代码将被 2 个或更多功能使用 -> 在
internal/core/中创建
架构(模块化,强制)
| 层 | 位置 | 最大行数 |
|---|---|---|
| 处理器 | internal/modules/[feature]/handlers/ | 50 |
| 服务 | internal/modules/[feature]/services/ | 100 |
| 仓库 | internal/modules/[feature]/repositories/ | 100 |
| Ports(接口) | internal/modules/[feature]/ports/ | 30 |
| 模型 | internal/modules/[feature]/models/ | 50 |
| 共享 | internal/core/{services,ports,models}/ | - |
绝不使用扁平的 internal/ 结构——始终使用 internal/modules/[feature]/
关键规则(强制)
| 规则 | 值 |
|---|---|
| 文件限制 | 100 行(达到 90 行时拆分) |
| 处理器 | < 50 行,委托给服务 |
| 接口 | 仅限 ports/ 目录 |
| Godoc | 为每个导出的函数编写文档 |
| 接受接口 | 返回结构体 |
| 小型接口 | 最多 1-3 个方法(Go 惯用写法) |
参考指南
概念
| 主题 | 参考文档 | 何时查阅 |
|---|---|---|
| SOLID 概览 | solid-principles.md | 快速参考 |
| SRP | single-responsibility.md | 结构体臃肿时 |
| OCP | open-closed.md | 添加提供方时 |
| LSP | liskov-substitution.md | 契约 |
| ISP | interface-segregation.md | 接口臃肿时 |
| DIP | dependency-inversion.md | 注入 |
| 架构 | architecture-patterns.md | 六边形/模块化 |
模板
| 模板 | 使用场景 |
|---|---|
| module.md | 功能模块结构 |
| service.md | 业务逻辑服务 |
| interface.md | Port 定义 |
| handler.md | HTTP 处理器 |
| error.md | 自定义错误 |
| test.md | 表驱动测试 |
禁止事项
| 反模式 | 修正方法 |
|---|---|
| 文件超过 100 行 | 达到 90 行时拆分 |
| 在实现文件中定义接口 | 移至 ports/ 目录 |
| 臃肿接口(4 个或更多方法) | 拆分为小型接口 |
扁平的 internal/ 结构 | 使用 internal/modules/[feature]/ |
使用 init() 进行依赖装配 | 使用构造函数注入 |
评论
支持 Markdown