your-project/
├── cmd/
│ └── server/
│ └── main.go # 入口:加载配置、初始化DB、启动Gin
├── config/ # 配置文件
├── internal/ # 内部业务(核心)
│ ├── model/ # 数据库模型
│ │ ├── entity/ # 表结构:user、admin、order、config 等
│ │ └── dto/ # 请求/返回结构体(入参、出参)
│ ├── dao/ # 数据操作层
│ │ ├── user_dao.go
│ │ └── admin_dao.go
│ ├── service/ # 业务逻辑层
│ │ ├── api/ # 对外接口业务
│ │ │ └── user_service.go
│ │ └── admin/ # 后台管理业务
│ │ └── admin_user_service.go
│ └── middleware/ # 中间件
│ ├── jwt_auth.go # 普通用户JWT
│ └── admin_auth.go # 管理员鉴权(必须单独一套)
├── api/
│ ├── v1/ # 对外接口
│ │ └── user_controller.go
│ └── admin/ # 后台管理接口(控制器)
│ ├── login.go # 管理员登录
│ ├── user_controller.go # 后台用户管理
│ ├── order_controller.go # 后台订单管理
│ └── system_controller.go # 系统配置
├── router/
│ ├── router.go # 总路由
│ ├── api_router.go # 对外API路由
│ └── admin_router.go # 后台路由组
├── pkg/
│ ├── response/ # 统一返回体
│ ├── utils/
│ └── logger/
├── static/ # 后台静态资源(可选)
├── templates/ # HTML模板(如果用后端渲染)
├── uploads/ # ✅ 核心:用户上传文件、图片都放这里
│ ├── images/ # 头像、封面、内容图
│ ├── files/ # 附件、文档
│ └── temp/ # 临时文件
├── go.mod
└── README.md
1. cmd/server/main.go
项目唯一入口
初始化 Gin 引擎
加载配置、连接数据库
注册路由、启动服务
2. api/
接口控制层
接收前端 HTTP 请求
校验入参
调用 service 层
返回统一响应结果
按版本划分(v1/v2),方便迭代
3. internal/
核心业务代码(私有,不可被外部项目引用)
model:数据库表结构体、请求 / 响应结构体
dao(Data Access Object):纯操作数据库,无业务逻辑
service:业务逻辑层,处理核心规则、调用 dao
4. pkg/
公共工具(通用、可复用)
统一响应格式、日志、JWT、加密、时间工具等
所有项目都能共用的代码放这里
5. router/
路由与中间件
统一管理所有接口路由
全局中间件(跨域、鉴权、日志)
6. config/
配置管理
数据库、Redis、端口、环境变量等配置
支持 yaml/json 配置文件
1. 接口层拆分
api/v1/*:对外用户接口(APP / 小程序)
api/admin/*:后台管理接口(增删改查、导出、审核)
2. 业务层拆分
service/api/:普通用户业务
service/admin/:管理员业务(权限更高)
3. 中间件必须两套(非常重要)
用户登录鉴权:middleware/jwt_auth.go
管理员登录鉴权:middleware/admin_auth.go
一般后台会额外加:角色权限 RBAC、操作日志、防重复提交
4. 路由分组(Gin 核心用法)
// router.go 示例
func InitRouter() *gin.Engine {
r := gin.Default()
// 对外 API
api := r.Group("/api/v1")
{
api.GET("/user", api.UserList)
}
// 后台管理
admin := r.Group("/admin")
admin.Use(middleware.AdminAuth()) // 管理员鉴权
{
admin.GET("/users", admin.UserList)
admin.POST("/user", admin.CreateUser)
}
return r
}
5. 后台常见额外目录
templates/:如果你用 Gin 渲染 HTML 后台页面
static/:存放 js/css/image
internal/service/admin/log_service.go:操作日志
internal/model/entity/role.go:角色、权限表
main.go
config/
models/
middleware/ // 管理员鉴权
controllers/
├── api/ // 对外接口
└── admin/ // 后台接口
services/
├── api/
└── admin/
router/ // 路由分组
utils/
1.一套 Gin,两套路由:/api/v1 + /admin
2.两套鉴权:用户 Token / 管理员 Token 不能混用
3.控制器和业务分层:后台接口单独文件夹,不乱
4.后台必带:登录、鉴权、RBAC 权限、操作日志
本文为宁采臣原创文章,转载无需和我联系,但请注明来自宁采臣博客http://baijunyao.com
最新评论