Skip to content

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)

  1. 领域层(Domain Layer):

    • 包含核心业务逻辑和规则
    • 定义实体、值对象、领域事件
    • 定义仓储接口(不包含实现)
  2. 应用层(Application Layer):

    • 协调领域对象完成用例
    • 处理事务、安全等跨领域关注点
    • 通常以CQRS模式组织
  3. 基础设施层(Infrastructure Layer):

    • 提供技术实现细节
    • 数据库访问、消息队列、缓存等实现
    • 框架相关代码(HTTP服务器等)
  4. 接口层(Interface Layer):

    • 处理外部交互(HTTP/RPC等)
    • 数据转换(请求/响应DTO)
    • 输入验证

各层详细职责

层级依赖被依赖典型组件
领域层(心脏)应用层
基础设施层(接口)
实体, 值对象, 领域服务, 仓储接口
应用层领域层接口层应用服务, CQRS处理器
基础设施层领域层(接口)数据库访问, 外部服务集成
接口层应用层Controllers, DTOs, API路由