用途:为 Go API 与服务代码库提供结构规范,核心主张是“目录用于导航,导入图才是架构”。先决定导入方向,再决定文件位置;仅靠移动文件或重命名目录无法解耦,只有删除 import 行才能移除依赖箭头。
主要能力:定义四类角色——Domain(业务规则,不感知 HTTP 与数据库)、Adapter(与进程外系统通信,如数据库、Stripe、S3)、Transport(处理协议,如 handler、JSON、状态码)、Capability(进程内机制,如 worker 池、密码哈希);并区分 DTO 与消费者声明的接口。给出分层选择:Tier 1 单二进制、少于 10 个端点、无可替换依赖;Tier 2(默认)真实服务;Tier 3 多个限界上下文或多个二进制。提供默认目录布局(cmd/、internal/、migrations/、openapi.yaml、Makefile、go.mod),并规定依赖方向:cmd 负责装配,transport 与 adapter 指向 domain,domain 不导入 net/http、database/sql、驱动或厂商 SDK。
使用方式:接口由调用方声明,实现方满足;仅在跨越进程边界处使用接口,进程内逻辑直接调用测试;非确定性(时钟、随机、ID)以函数值注入而非接口。在实现处做编译期断言,如 var _ accounts.Store = (*AccountStore)(nil)。提供“这个文件放哪里”的对照表,以及包命名约定(小写单词、按限界上下文命名、避免 util/common/shared)。
检查与限制:建议运行 gofmt -l .、go vet ./...、golangci-lint run、go test ./... -race -shuffle=on、govulncheck ./...。列出多种红旗,如 domain 导入数据库驱动、接口与唯一实现同包、根目录 pkg/、全局 logger、无 panic 恢复中间件、就绪端点无条件返回 200 等。明确不涉及数据库查询层选型、迁移工具、API 契约与版本化。具体收费、平台与效果资料未提供。