目录结构
cmd/
standalone/main.go 单体入口:auth+system+monitor+resource 同进程 :8080
modular/
auth/main.go auth 进程入口
system/main.go system 进程入口
monitor/main.go monitor 进程入口
resource/main.go resource 进程入口
Dockerfile 多模块通用镜像(--build-arg MODULE 选入口)
standalone/Dockerfile 单体镜像
internal/ 按模块组织,严格三层
<module>/
router.go 路由注册 RegisterRoutes(r, prefix)
handler/ HTTP 层:绑定参数、调 service、返回 response.R
service/ 业务逻辑;system 的 service 导出供 auth 复用
repository/ 数据访问,只有这一层碰 GORM/DB
model/ entity(表) / dto(入参) / vo(出参)
pkg/ 可复用公共库
response/config/database/redis/middleware/satoken/oplog/excel/tree/oss/push/...
configs/ application.yaml(公共) + <module>.yaml(各进程端口/雪花ID)
script/sql/ ry_vue.sql 建表 SQL(复用原项目表结构)
docs/CRUD-SPEC.md 增删改查落地模板与踩坑点(写 CRUD 前先读)分层依赖
单向:handler → service → repository → model,禁止反向依赖、禁止 handler 直连 repository。pkg 不能 import internal (注解层落库等场景用 Recorder 回调让 internal 反向注册)。详见 分层与依赖。
nginx 配置
nginx 负载均衡 / 前缀剥离的配置不在仓库内(各 modular 进程路由以空前缀注册,由上游网关 StripPrefix=1 剥前缀),需要时自行补 deploy/ 目录。
各层职责一句话
| 层 | 职责 |
|---|---|
cmd/<module>/main.go | 进程入口:加载配置、初始化基础设施、装配全局中间件、注册路由、启动 server |
handler | HTTP 层:绑定参数、调 service、返回 response.R;不碰 DB、不写错误 JSON |
service | 业务逻辑;返回 VO(不漏 entity 给 handler);错误一律 return err |
repository | 数据访问,唯一直接碰 GORM 的层;分页 / 逻辑删除 / 审计填充走 pkg/repository |
model | entity(表)/ dto(入参)/ vo(出参);conv_gen.go 是 goverter 生成的转换器 |
pkg | 可复用公共库,不依赖 internal |