项目结构
hr/
├── main.go # 入口:配置解析、依赖组装、启动服务
├── config/
│ ├── config.go # Config 结构体,环境变量读取
│ └── db.go # NewDB() 连接 PostgreSQL
├── models/
│ ├── employee.go # Employee 模型
│ └── department.go # Department 模型
├── repository/
│ ├── employee_repo.go # EmployeeRepository 接口 + 实现
│ ├── employee_repo_test.go
│ ├── department_repo.go # DepartmentRepository 接口 + 实现
│ ├── department_repo_test.go
│ └── test_helpers.go # 测试辅助函数
├── service/
│ ├── errors.go # 业务错误定义
│ ├── employee_service.go # EmployeeService 接口 + 实现
│ ├── employee_service_test.go
│ ├── department_service.go # DepartmentService 接口 + 实现
│ └── department_service_test.go
├── handler/
│ ├── router.go # 路由注册
│ ├── middleware.go # 中间件(CORS)
│ ├── employee_handler.go # 员工相关 handler
│ ├── department_handler.go # 部门相关 handler
│ └── employee_handler_test.go # handler 测试
├── tools/
│ └── seed.go # 种子数据工具
├── .github/workflows/
│ └── pipeline.yml # CI/CD
├── Dockerfile # 多阶段构建
├── docker-compose.yml # 本地开发环境
├── go.mod
├── go.sum
├── api_test.http # HTTP 接口测试文件(IDE 用)
└── docs/ # 项目文档(mdbook)
各目录职责
| 目录 | 职责 | 依赖方向 |
|---|---|---|
| config | 配置和数据库初始化 | 被 main 引用 |
| models | 数据结构定义,无逻辑 | 被 repository/service/handler 引用 |
| repository | 数据访问,定义接口 | 依赖 models,被 service 引用 |
| service | 业务逻辑,定义接口 | 依赖 repository 接口 + models,被 handler 引用 |
| handler | HTTP 处理,路由,中间件 | 依赖 service 接口,被 main 组装 |
| tools | 辅助脚本 | 独立运行 |
依赖方向:handler → service → repository → models,不反向依赖。