1. 概述
实际项目业务功能和模块会很多,我们不可能把所有代码都写在一个 go 文件里面或者写在一个 main 入口函数里面;我们需要对项目结构做一些规划,方便维护代码以及扩展。
Gin 框没有对项目结构做出限制,我们可以根据自己项目需要自行设计。
2. 项目结构
- 有视图模板
├── conf #项目配置文件目录
│ └── config.toml #大家可以选择自己熟悉的配置文件管理工具包例如:toml、xml 等等
├── controllers #控制器目录,按模块存放控制器(或者叫控制器函数),必要的时候可以继续划分子目录。│ └── user.go
├── models #模型目录,负责项目的数据存储部分,例如各个模块的 Mysql 表的读写模型。│ ├── food.go
│ └── user.go
├── static #静态资源目录,包括 Js,css,jpg 等等,可以通过 Gin 框架配置,直接让用户访问。│ ├── css
│ ├── images
│ └── js
├── logs #日志文件目录,主要保存项目运行过程中产生的日志。└── views #视图模板目录,存放各个模块的视图模板,当然有些项目只有 api,是不需要视图部分,可以忽略这个目录
│ └── index.html
├── main.go #项目入口,这里负责 Gin 框架的初始化,注册路由信息,关联控制器函数等。
- api 开发
├── conf #项目配置文件目录
│ └── config.toml #大家可以选择自己熟悉的配置文件管理工具包例如:toml、xml 等等
├── controllers #控制器目录,按模块存放控制器(或者叫控制器函数),必要的时候可以继续划分子目录。│ └── user.go
├── models #模型目录,负责项目的数据存储部分,例如各个模块的 Mysql 表的读写模型。│ ├── food.go
│ ├── user.go
│ └── init.go #模型初始化
├── logs #日志文件目录,主要保存项目运行过程中产生的日志。├── main.go #项目入口,这里负责 Gin 框架的初始化,注册路由信息,关联控制器函数等。
以上两种目录结构基本上大同小异,一般的项目构建都可以使用这样的项目结构,清晰明了。
3. 项目结构扩展
对于一般的项目都是使用上面的目录结构,但是有时候项目复杂了,会进一步拆分,把数据校验,模型定义,数据操作,服务,响应进行解耦。
数据校验 -> 控制器 -> 调用服务 -> 数据操作 -> 数据模型 -> 数据响应
目录结构如下:
├── conf #项目配置文件目录
│ └── config.toml #大家可以选择自己熟悉的配置文件管理工具包例如:toml、xml、ini 等等
├── requests #定义入参即入参校验规则
│ └── user_request.go
│ └── food_request.go
├── responses #定义响应的数据
│ └── user_response.go
│ └── food_response.go
├── services #服务定义目录
| └── v1 #服务 v1 版本
│ | └── user_service.go
│ | └── food_service.go
| └── v2 #服务 v2 版本
│ | └── user_service.go
│ | └── food_service.go
├── api #api 目录,按模块存放控制器(或者叫控制器函数),必要的时候可以继续划分子目录。│ └── v1 #apiv1 版本
│ | └── user.go
│ | └── food.go
│ └── v2 #apiv2 版本
│ | └── user.go
│ | └── food.go
├── router #路由目录
│ └── v1 #路由 v1 版本
│ | └── user.go
│ | └── food.go
│ └── v2 #路由 v2 版本
│ | └── user.go
│ | └── food.go
├── init.go #路由初始化
├── pkg #自定义的工具类等
│ └── e #项目统一的响应定义,如错误码,通用的错误信息,响应的结构体
│ └── util #工具类目录
├── models #模型目录,负责项目的数据存储部分,例如各个模块的 Mysql 表的读写模型。│ ├── food.go
│ ├── user.go
│ └── init.go #模型初始化
├── repositories #数据操作层,定义各种数据操作。│ └── user_repository.go
│ └── food_repository.go
├── logs #日志文件目录,主要保存项目运行过程中产生的日志。├── main.go #项目入口,这里负责 Gin 框架的初始化,注册路由信息,关联控制器函数等。
通过上面的项目结构扩展,增加了代码量,但是把各层的职责界定了,每一层的只做每一层的事情,数据解耦