## 1.概述
實際項目業務功能和模塊會很多,我們不可能把所有代碼都寫在一個go文件里面或者寫在一個main入口函數里面;我們需要對項目結構做一些規劃,方便維護代碼以及擴展。
> Gin框沒有對項目結構做出限制,我們可以根據自己項目需要自行設計。
## 2.項目結構
- 有視圖模板
```shell
├── 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開發
```shell
├── conf #項目配置文件目錄
│ └── config.toml #大家可以選擇自己熟悉的配置文件管理工具包例如:toml、xml等等
├── controllers #控制器目錄,按模塊存放控制器(或者叫控制器函數),必要的時候可以繼續劃分子目錄。
│ └── user.go
├── models #模型目錄,負責項目的數據存儲部分,例如各個模塊的Mysql表的讀寫模型。
│ ├── food.go
│ ├── user.go
│ └── init.go #模型初始化
├── logs #日志文件目錄,主要保存項目運行過程中產生的日志。
├── main.go #項目入口,這里負責Gin框架的初始化,注冊路由信息,關聯控制器函數等。
```
以上兩種目錄結構基本上大同小異,一般的項目構建都可以使用這樣的項目結構,清晰明了。
## 3.項目結構擴展
對于一般的項目都是使用上面的目錄結構,但是有時候項目復雜了,會進一步拆分,把數據校驗,模型定義,數據操作,服務,響應進行解耦。
```shell
數據校驗->控制器->調用服務->數據操作->數據模型->數據響應
```
目錄結構如下:
```shell
├── 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框架的初始化,注冊路由信息,關聯控制器函數等。
```
通過上面的項目結構擴展,增加了代碼量,但是把各層的職責界定了,每一層的只做每一層的事情,數據解耦
> 更多內容請關注我的博客[SOCKSTACk](https://www.sockstack.cn)