Golang
Air热更新
Github仓库:https://github.com/air-verse/air
Go web 项目结构 - DDD思想
bash
/project-name
├── cmd/ # 应用程序入口点
│ └── api/ # API服务入口
│ └── main.go # 主程序入口
├── internal/ # 私有应用程序代码(DDD核心)
│ ├── domain/ # 领域层
│ │ ├── models/ # 领域模型(实体、值对象)
│ │ ├── repositories/ # 仓储接口
│ │ └── services/ # 领域服务
│ ├── application/ # 应用层
│ │ ├── commands/ # CQRS命令
│ │ ├── queries/ # CQRS查询
│ │ └── services/ # 应用服务
│ ├── infrastructure/ # 基础设施层
│ │ ├── config/ # 配置管理
│ │ ├── persistence/ # 持久化实现
│ │ │ ├── gorm/ # GORM实现(或其他ORM)
│ │ │ └── inmemory/ # 内存实现(用于测试)
│ │ ├── logging/ # 日志
│ │ └── middleware/ # HTTP中间件
│ └── interfaces/ # 接口层
│ ├── http/ # HTTP处理程序
│ │ ├── handlers/ # HTTP处理器
│ │ ├── requests/ # 请求DTO
│ │ ├── responses/ # 响应DTO
│ │ ├── routes/ # 路由定义包
│ │ └── router.go # 主路由组装器(整合所有子路由)
│ └── grpc/ # gRPC接口(可选)
├── pkg/ # 可复用的公共库
│ ├── errors/ # 自定义错误处理
│ ├── utils/ # 实用工具
│ └── validation/ # 验证逻辑
├── migrations/ # 数据库迁移文件
├── scripts/ # 脚本文件
├── api/ # API定义(OpenAPI/Swagger)
├── configs/ # 配置文件
├── build/ # 构建脚本
├── Dockerfile # Docker构建文件
├── go.mod # Go模块定义
└── README.md # 项目说明
核心分层解释(DDD)
领域层(Domain Layer):
- 包含核心业务逻辑和规则
- 定义实体、值对象、领域事件
- 定义仓储接口(不包含实现)
应用层(Application Layer):
- 协调领域对象完成用例
- 处理事务、安全等跨领域关注点
- 通常以CQRS模式组织
基础设施层(Infrastructure Layer):
- 提供技术实现细节
- 数据库访问、消息队列、缓存等实现
- 框架相关代码(HTTP服务器等)
接口层(Interface Layer):
- 处理外部交互(HTTP/RPC等)
- 数据转换(请求/响应DTO)
- 输入验证
各层详细职责
层级 | 依赖 | 被依赖 | 典型组件 |
---|---|---|---|
领域层(心脏) | 无 | 应用层 基础设施层(接口) | 实体, 值对象, 领域服务, 仓储接口 |
应用层 | 领域层 | 接口层 | 应用服务, CQRS处理器 |
基础设施层 | 领域层(接口) | 无 | 数据库访问, 外部服务集成 |
接口层 | 应用层 | 无 | Controllers, DTOs, API路由 |