## 项目架构说明 ### 技术栈概览 - Web 框架:Gin (`internal/interface/http`) - ORM 层:GORM(`internal/infrastructure/database`、`internal/infrastructure/repository`) - 接口文档:Swaggo(`docs/docs.go`、`/swagger` 路由) - 配置管理:Viper + YAML (`internal/config`) - 日志:自定义包装(`pkg/logger`) ### 数据库自动切换 - 配置文件 `configs/config.yaml` 通过 `database.driver` 控制当前使用的数据库(未设置时自动回退为 `sqlite`)。 - 支持的驱动: - `sqlite`:默认用于本地与轻量测试;路径可通过 `database.sqlite.path` 自定义。 - `mysql`:提供账号、主机、端口、库名与参数配置。 - `postgres`:提供账号、主机、端口、库名与 SSL 模式配置。 - `internal/infrastructure/database/database.go` 根据配置动态选择驱动并建立连接,确保应用无需改动即可切换数据库。 ### 自动迁移机制 - `cmd/server/main.go` 中的 `autoMigrate` 函数会在启动时对 `internal/domain/model` 内的模型执行 `db.AutoMigrate`。 - 当前示例模型为 `model.User`,可按需扩展更多模型。 ### 分层结构(类 Clean Architecture) - `internal/domain`:领域模型与仓储接口。 - `internal/usecase`:业务用例与应用服务。 - `internal/infrastructure`:具体实现(数据库、仓储等)。 - `internal/interface/http`:Gin 路由与控制器。 - `cmd/server`:程序入口,负责初始化配置、日志、数据库、依赖注入以及启动 HTTP 服务。 ### 配置流程 1. `cmd/server/main.go` 调用 `config.LoadConfig` 读取 `configs` 目录下的 `config.yaml`。 2. 根据配置创建日志实例,初始化数据库连接。 3. 执行自动迁移,注入仓储与服务,再初始化 Gin 路由并启动服务。 4. 注册 `/swagger/*any` 路由,直接访问并查看自动生成的 Swagger UI。 ### 快速验证 1. 修改 `configs/config.yaml` 中的 `database.driver` 为 `sqlite`、`mysql` 或 `postgres`。 2. 启动服务 `go run ./cmd/server`,确认可正常连接并迁移数据库。 3. 访问 `GET /api/v1/users` 等 REST 接口验证路由与仓储是否正常工作。