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

项目架构说明

技术栈概览

  • Web 框架:Gin (internal/interface/http)
  • ORM 层:GORM(internal/infrastructure/databaseinternal/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.driversqlitemysqlpostgres
  2. 启动服务 go run ./cmd/server,确认可正常连接并迁移数据库。
  3. 访问 GET /api/v1/users 等 REST 接口验证路由与仓储是否正常工作。