Go 项目设计

单体应用

使用 Gin(Web 框架) + GORM(ORM 框架) 构建单体应用时,推荐采用经典的 分层架构 。 这种架构的核心原则是 "依赖单向向下" :

HTTP Handler (Controller) ➔ Service (业务逻辑) ➔ Repository (数据持久化) ➔ GORM / Database

项目目录结构

text 复制代码
├── app.go              # 手写依赖注入,初始化 Web 服务
├── main.go             # 程序入口
├── Dockerfile          # 生产镜像构建
├── docker-compose.yaml # 本地依赖服务(MySQL / Redis)
├── config/
│   └── dev.yaml        # 本地开发配置
├── internal/
│   ├── domain/         # 领域模型
│   ├── repository/     # 数据仓库抽象
│   │   └── dao/        # 数据库操作
│   │   └── cache/      # 数据库缓存
│   ├── service/        # 业务逻辑
│   └── web/            # HTTP 接口层
├── pkg/                # 项目内部通用工具(统一响应、自定义错误等)
├── script/             # 数据库初始化等脚本
├── ioc/                # 基础设施初始化(DB / Redis / 中间件 / Handler)
└── k8s-*.yaml          # Kubernetes 部署资源
引入 Service - Repostiory - DAO 三层结构
  • service: 代表的是领域服务(domain service), 代表一个业务的完整的处理过程。
  • repository:按照 DDD 的说法,是代表领域对象的存储,这里你直观理解为存储数据的抽象。
  • dao: 代表的是数据库操作。
  • domain:代表领域对象。
调用流程
相关推荐
小杨互联网19 小时前
Go 现代 CLI 工具离线镜像合集
开发语言·后端·golang·开源·go·命令行
hourinX1 天前
从直接填格子到筛选图案:头像生成这部分是怎样改过来的—— gdenticon 重构日志(三)
go
我不会起名字3221 天前
Redis 从 0 到 1(十三):分布式锁被误删、锁不住?Go 无 Lua 实现 3 级防御
redis·go·分布式锁·watch·setnx
hourinX2 天前
从 v1 到 v2,我重新拆了头像生成的整条链路—— gdenticon 重构日志(二)
go
FungLeo2 天前
成为全栈·Go 后端篇·分类树与标签关系:目录变更为何需要协调
golang·go·gorm·数据库事务·分类树·成为全栈
FungLeo2 天前
成为全栈·Go 后端篇·文章查询与展示投影:安全分页、排序和软删除
golang·go·gorm·分页查询·成为全栈·sql安全
KevinAshen673 天前
用 Go 修复旧下载工具:从接口 403 到凭证截断的完整复盘
go·github
FungLeo4 天前
成为全栈·Go 后端篇·跨语言认证兼容:Node 与 Go 如何互认 JWT 和密码
golang·go·jwt·身份认证·成为全栈·bcrypt
FungLeo4 天前
成为全栈·Go 后端篇·重写之前先锁基线:契约、Node 版本与行为清单
golang·node.js·go·openapi·契约测试·成为全栈
小满zs4 天前
Go语言第十七章(反射)
后端·go