You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
2.2 KiB

1 month ago
## 项目架构说明
### 技术栈概览
- 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 接口验证路由与仓储是否正常工作。