Skip to content

目录结构

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
handlerHTTP 层:绑定参数、调 service、返回 response.R;不碰 DB、不写错误 JSON
service业务逻辑;返回 VO(不漏 entity 给 handler);错误一律 return err
repository数据访问,唯一直接碰 GORM 的层;分页 / 逻辑删除 / 审计填充走 pkg/repository
modelentity(表)/ dto(入参)/ vo(出参);conv_gen.go 是 goverter 生成的转换器
pkg可复用公共库,不依赖 internal

基于 MIT 协议开源