其實嚴格意義來說`Go`中沒有類、繼承的等概念,為了結合`Laravel`框架的編程思想更好的理解,所以做了個控制器基礎類`base_api_controller.go` ,當然你也無需繼承任何的基礎類或其他控制器。
## 控制器定義
一個典型的控制器類定義如下:
```
// Package v1 處理業務邏輯, GoHub 控制器 v1
package v1
import (
"gohub/pkg/response"
"github.com/gin-gonic/gin"
)
type BaseAPIController struct {
}
func (lc *BaseAPIController) Index(c *gin.Context) {
c.JSON(200, "Hello World")
}
```
控制器類文件實際上可以是任意位置只需要路由文件中找到“它”即可,但我們為了遵守框架的編碼規范和目錄結構,**強烈建議**在`app/http/controllers/api`目錄下定義它,當然幾章前提到的接口區分`v1` `v2` `...`版本,所以文件的標準位置是
```
app/http/controllers/api/v1
```
控制器類無需繼承任何包(類)文件,但我們還是建議你繼承一個基礎包(類)文件`base_api_controller.go`以便不時之需。
## 控制器方法作用域
與其他語言不同,在`Go`中不能使用`public` `protected` `private` 關鍵字聲明方法的作用域,簡單的來說只有兩種情況:
只能在當前包文件訪問的使用**開頭字母小寫**,比如說:
```
func (lc *BaseAPIController) show(c *gin.Context) {
c.JSON(200, "Hello World")
}
```
在所有包文件中都能使用的(全局)使用**開頭字母大寫**,比如說:
```
func (lc *BaseAPIController) Show(c *gin.Context) {
c.JSON(200, "Hello World")
}
```
更多更加詳細的示例請查閱`Go語言基礎`
## 渲染輸出
默認情況下,控制器輸出可以直接使用`gin`框架自帶的輸出方式,而不是`return` 。
為了更加方便和規范請使用框架公共響應包(類)文件`"gohub/pkg/response"` 你需要在控制器的頂部 `import` 這個文件才可以使用。
#### 響應成功
`response.ShowSuccess`方法可接收三個參數:
- 第一個參數為固定的`gin.Context`指針
- 第二個參數為響應的數據,可以是任何數據格式(`Go`版本必須`>= 1.18`)
- 第三個參數非必填,響應自定義的`msg`信息,默認為`success`
示例一:
```
response.ShowSuccess(c, "操作成功!")
```
輸出結果:
```
{
"code":0,
"msg":"success",
"data":"操作成功!"
}
```
示例二:
```
response.ShowSuccess(c, gin.H{
"list": data,
"pagination": pagination,
},"操作成功!")
```
輸出結果:
```
{
"code":0,
"msg":"操作成功!",
"data":{
"list":...,
"pagination":...
}
}
```
#### 響應失敗
`response.ShowError`方法可接收三個參數:
- 第一個參數為固定的`gin.Context`指針
- 第二個參數是`Int`類型的錯誤碼(請盡可能使用標準的`http狀態碼`,如 `401無權限訪問`)
- 第三個參數非必填,響應自定義的`msg`信息,默認為`error`
示例:
```
response.ShowError(c, 404, "路由未定義,請確認 url 和請求方法是否正確。")
```
輸出結果:
```
{
"code":401,
"msg":"路由未定義,請確認 url 和請求方法是否正確。",
"data":null
}
```
**所有響應的`HTTP`狀態碼均為200的`JSON`格式數據**,方便業務進行重試,同時也不會造成無關緊要的錯誤上報。
業務方只需判斷`code`不為`0`就拋出`msg`的異常信息即可。
更加令人驚喜的是,無論在任意地方使用這個方法都會輸出結果,并不在繼續往下執行代碼。這可以讓我們不必在某些業務下頻繁拋出無關緊要的異常特意的終止執行。
- 序言
- 基礎
- 安裝GoHub
- 目錄結構
- 開發規范
- 部署項目
- 架構
- 架構總覽
- 生命周期
- 配置
- 配置介紹
- 配置目錄
- 配置格式
- 配置加載
- 讀取配置
- 動態配置
- 環境變量配置
- 路由
- 路由模式
- 路由定義
- 路由參數
- 路由分組
- 路由限流
- 路由拆分
- 控制器
- 控制定義
- 控制器初始化
- 中間件
- Make創建控制器
- 請求
- 請求信息
- 數據庫
- 連接數據庫
- 基本使用
- Make創建模型
- 日志
- 介紹
- 日志驅動
- 日志寫入
- HTTP日志
- 數據庫請求日志
- 錯誤和調試
- Debuger調試器
- 驗證
- 驗證器
- 驗證規則
- Make創建驗證器
- 雜項
- 緩存
- 分頁
- 驗證碼
- CURL請求
- 命令行
- 基礎知識
- console 包
- Cobra 基礎
- 命令行模式
- 附錄
- 配置參考
- 第三方依賴庫