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.
2.2 KiB
2.2 KiB
项目架构说明
技术栈概览
- 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 服务。
配置流程
cmd/server/main.go调用config.LoadConfig读取configs目录下的config.yaml。- 根据配置创建日志实例,初始化数据库连接。
- 执行自动迁移,注入仓储与服务,再初始化 Gin 路由并启动服务。
- 注册
/swagger/*any路由,直接访问并查看自动生成的 Swagger UI。
快速验证
- 修改
configs/config.yaml中的database.driver为sqlite、mysql或postgres。 - 启动服务
go run ./cmd/server,确认可正常连接并迁移数据库。 - 访问
GET /api/v1/users等 REST 接口验证路由与仓储是否正常工作。