用途
golang-enterprise-patterns 提供企业级 Go 应用架构、设计模式与生产级代码组织的指导。根据资料,它适用于以下场景:
- 设计具有复杂业务逻辑的新 Go 应用
- 实现整洁架构(Clean Architecture)或六边形架构(Hexagonal Architecture)
- 应用领域驱动设计(DDD)原则
- 组织大型 Go 代码库
- 建立团队一致性的模式
主要能力
整洁架构
资料给出的分层结构为:
/cmd
/api - HTTP/gRPC entry points
/worker - Background job runners
/internal
/domain - Business entities and interfaces
/application - Use cases and application services
/infrastructure
/persistence - Database implementations
/messaging - Queue implementations
/http - HTTP client implementations
/interfaces
/api - HTTP handlers
/grpc - gRPC handlers
/pkg - Shared libraries (public)
依赖规则是依赖只向内流动:
Interfaces → Application → Domain
↓ ↓
Infrastructure (implements domain interfaces)
领域层示例定义了 UserID、User 实体、UserRepository 接口(FindByID、FindByEmail、Save、Delete)以及 UserService 接口(Register、Authenticate)。
应用层示例中的 UserServiceImpl 依赖 domain.UserRepository、PasswordHasher、Logger,通过构造函数注入,并在 Register 方法中检查用户是否已存在、构建 User 实体、调用仓储保存并返回错误包装。
六边形架构(端口与适配器)
端口定义分为主端口(驱动端口/输入)和次端口(被驱动端口/输出):
- 主端口 UserAPI 包含 CreateUser、GetUser
- 次端口 UserStorage 包含 Save、FindByID;NotificationSender 包含 SendWelcomeEmail
适配器实现示例展示了 Postgres 的 UserRepository,其 Save 方法执行 INSERT 语句。
领域驱动设计(DDD)
资料包含以下 DDD 构建块的示例:
- 聚合根(Aggregate Roots):Order 结构体包含 id、customerID、items、status、events,并提供 NewOrder、AddItem(校验状态为 Pending)、Submit(校验订单非空并记录 OrderSubmitted 事件)等方法
- 值对象(Value Objects):Money 结构体以分为单位保存 amount 与 currency,NewMoney 校验非负,Add 校验币种一致
- 领域事件(Domain Events):DomainEvent 接口包含 EventName 与 OccurredAt,示例事件为 OrderCreated
依赖注入
资料给出两种方式:
- Wire 风格 DI:通过 wire.Build 声明 NewDatabase、NewUserRepository、NewUserService、NewHTTPServer、NewApp 的构建
- 手动 DI(资料标注为简单场景的首选):在 main 中依次加载配置、连接数据库、创建仓储、创建服务、创建 handler 与 server 并运行
错误处理模式
定义了自定义 Error 类型(Code、Message、Err 字段,实现 Error 与 Unwrap 方法),并预定义 ErrNotFound、ErrUserAlreadyExists、ErrInvalidInput 等错误变量。
配置管理
Config 结构体包含 Server、Database、Redis 配置;Load 函数通过环境变量读取端口、读超时、数据库 URL、最大连接数等。
最佳实践
资料列出的最佳实践包括:
- 保持领域纯粹——领域层不依赖框架
- 接口隔离——使用小且聚焦的接口
- 依赖倒置——依赖抽象而非具体实现
- 显式依赖——通过构造函数传递依赖
- 快速失败——在边界校验,信任内部代码
- 让非法状态不可表示——用类型约束不变量
使用方式
资料未提供具体的安装命令、调用命令或配置步骤,仅以技能说明与代码示例呈现。如需在 AI 工具中使用该技能,资料未提供具体接入方式。
适用场景
适用于采用 Go 构建、具有复杂业务逻辑、需要长期维护与团队协作的企业级后端应用设计阶段与代码组织阶段。
限制
资料未说明该技能支持的具体模型、平台、收费方式或性能效果,这些信息暂未提供。