项目结构

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 引用
handlerHTTP 处理,路由,中间件依赖 service 接口,被 main 组装
tools辅助脚本独立运行

依赖方向:handler → service → repository → models,不反向依赖。