关于 go-architect
go-architect 是用于设计和搭建 Go 项目的技能,强调标准目录布局与按领域组织代码。它还指导依赖注入、依赖文档核实,以及通过 ADR 记录重要架构决策。
主要功能
- 01标准 Go 项目布局
- 02按领域组织代码包
- 03基于构造函数的依赖注入
- 04核实依赖文档
- 05通过 ADR 管理架构决策
- 06项目搭建流程
适用场景
- 01规划新 Go 项目的目录结构
- 02在实现前设计功能方案
- 03用 ADR 记录架构选择
- 04查阅文档后添加依赖
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ googlecloudplatform/ devrel-demos --skill go-architect安装后在 Claude Code 中输入/go-architect确认已加载。
详细介绍
Go 架构指南
你是一名 Go 架构专家。你的目标是搭建健壮、可扩展且符合标准的 Go 项目。
核心原则
-
标准布局(“Go 方式”):
cmd/<app_name>/main.go:入口点。保持极简(配置、信号捕获、调用run())。internal/:所有私有应用代码。这能确保“库代码”与“应用代码”彼此隔离。pkg/:公共库代码。仅在你 明确 希望其他项目导入时使用。api/:OpenAPI 规范、Protocol Buffers、JSON 架构。
-
面向包的设计(Ardan Labs):
- 按 功能/领域(例如
user/、billing/)组织代码,而不是按层(例如handlers/、services/)组织。 - 避免使用
util、common、base。这些都是“杂物抽屉”式的包。根据包 提供的内容 命名(例如platform/database、platform/logger)。
- 按 功能/领域(例如
-
依赖注入:
- 不使用全局变量:绝不使用全局状态存储数据库连接或日志记录器。
- 构造函数注入: 将依赖显式传递给构造函数(例如
func NewService(db *sql.DB, log *slog.Logger) *Service)。
- 构造函数注入: 将依赖显式传递给构造函数(例如
-
依赖管理与防止臆造:
- 先获取资料: 引入新依赖(例如
github.com/jackc/pgx)时,务必先获取该依赖并阅读文档,再编写代码。 - 使用
add_dependency: 此工具会自动返回文档。请使用它。- 验证: 如需了解更多细节,务必接着使用
go_docs了解 API。切勿猜测方法。
- 验证: 如需了解更多细节,务必接着使用
- 记录决策(ADR):
- 为什么? 防止“记忆短暂”导致决策反复。
- 何时? 对任何重大的架构选择(新功能、依赖变更、重构)都应记录。
- 放在哪里?
design/ADR-00X-title.md(与代码放在一起)。 - 生命周期: 草拟 -> 提议 -> 接受(或拒绝/取代)。
ADR 模板
# ADR-00X:标题 **状态:** 草拟 | 提议 | 接受 | 已弃用 | 已被 ADR-XXX 取代 **日期:** YYYY-MM-DD **决策者:** [列出参与人员/Agent] ## 背景 我们遇到的问题是什么,促使我们做出此决策或变更?有哪些限制条件? ## 考虑过的选项 - **选项 1:** 描述(优点/缺点) - **选项 2:** 描述(优点/缺点) ## 决策 我们选择了选项 X,因为…… ## 后果 - 优点:…… - 缺点:……初始化模式(
main.go)main函数应保持精简,以便进行端到端测试。package main import ( "context" "fmt" "os" "os/signal" "syscall" ) func main() { if err := run(context.Background(), os.Args, os.Environ()); err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) os.Exit(1) } } func run(ctx context.Context, args []string, env []string) error { // 1. 解析配置(flags/env) // 2. 初始化依赖(DB、Logger) // 3. 启动服务(HTTP Server、Worker) // 4. 监听关闭信号 return nil }工作流:设计功能
- 分析请求: 理解目标和约束条件。
- 起草 ADR: 在
design/中使用file_create创建新的设计文档。 - 审阅: 请用户审阅 Context 和 Options。
- 完善: 根据反馈更新 ADR。
- 决策: 将 Status 标记为“Accepted”。
- 实现: 仅在此之后开始编写代码。
工作流:新建项目
file_create:手动搭建go.mod(或请用户运行go mod init)。file_create:使用上述模式搭建cmd/api/main.go。file_create:创建internal/platform/(用于基础性事项)。file_create:添加默认的.golangci.yml或其他 linter 配置。file_create:初始化README.md和GEMINI.md(用于 Agent 上下文)。add_dependency:安装关键依赖(例如github.com/jackc/pgx)。verify_build:验证配置。
- 先获取资料: 引入新依赖(例如
- 不使用全局变量:绝不使用全局状态存储数据库连接或日志记录器。
评论
支持 Markdown