日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Gin 實現統一異常處理和封裝統一返回結果

來源: 責編: 時間:2023-11-28 17:11:04 233觀看
導讀在使用Gin開發web應用的時候,業務異常是很常見的,通常我們會為每個異常情況定義一個唯一的error。同時當發生異常的時候,我們也需要把異常信息放入到接口的響應信息里面,方便頁面上做提示。//業務異常package bizerrconst

在使用Gin開發web應用的時候,業務異常是很常見的,通常我們會為每個異常情況定義一個唯一的error。同時當發生異常的時候,我們也需要把異常信息放入到接口的響應信息里面,方便頁面上做提示。NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

//業務異常package bizerrconst ( // 定義可預見的異常  UserNotFound = 10001  PasswrodErr = 10002)var resultCodeText = map[int]string{  UserNotFound: "用戶不存在",}func Message(code int) (string, bool) {  message, ok := resultCodeText[code]  return message, ok}

NAq28資訊網——每日最新資訊28at.com

錯誤碼這里有5位 NAq28資訊網——每日最新資訊28at.com

1
NAq28資訊網——每日最新資訊28at.com

01
NAq28資訊網——每日最新資訊28at.com

01
NAq28資訊網——每日最新資訊28at.com

錯誤級別,如服務級
NAq28資訊網——每日最新資訊28at.com

模塊級,如用戶模塊
NAq28資訊網——每日最新資訊28at.com

具體的錯誤碼,如用戶名錯誤
NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

  • 錯誤級別:服務級錯誤用1,普通錯誤用2,通常是用戶的非法操作      
  • 模塊級錯誤碼:2 位數進行表示,比如 01 為用戶模塊;02 為訂單模塊  
  • 具體錯誤碼:2 位數進行表示,比如 01 為手機號不合法;02 為密碼輸入錯誤

NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

為了讓這些錯誤信息以及正常情況的返回數據都有統一的結構來管理,我們需要先定義一個統一返回的數據結構體。NAq28資訊網——每日最新資訊28at.com

要想實現統一的異常處理,我們需要借助Gin提供的中間件功能去在返回數據之前,攔截到出現的錯誤,在這里重新包裝成我們定義的統一結構體。NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

package middlewareimport (  "net/http"  "github.com/gin-gonic/gin")// Result 表示統一響應的JSON格式type Result struct {  Code    int         `json:"code"`    // 狀態碼  Message string      `json:"message"` // 響應消息  Data    interface{} `json:"data"`    // 響應數據}

NAq28資訊網——每日最新資訊28at.com

接下來我們要給 Result 提供幾個常用的方法,比如出現異常時候需要調用的方法,正常情況下需要調用的方法。NAq28資訊網——每日最新資訊28at.com

func Fail(c *gin.Context, code int, message string) {  c.JSON(code, Result{    Code:    code,    Message: message,    Data:    nil,  })   c.Abort()}  //異常信息從定義好的bizerr里面獲取 func Fail(c *gin.Context, code int) {  message, _ := bizerr.StatusText(code)  c.JSON(code, Result{    Code:    code,    Message: message,    Data:    nil,  })  c.Abort()}//ok  不需要返回數據 datafunc Ok(c *gin.Context, code int) {  c.JSON(code, Result{    Code:    code,    Message: message,    Data:    nil,  })}//接口執行正常 需要返回數據 datafunc Ok(c *gin.Context, code int, message string, data interface{} ) {  c.JSON(code, Result{    Code:    code,    Message: message,    Data:    data,  })}//接口執行正常 需要返回數據 datafunc Ok(c *gin.Context, code int, data interface{} ) {  c.JSON(code, Result{    Code:    code,    Message: "ok",    Data:    data,  })}

NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

實現攔截返回結果的中間件NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

func GlobalErrorMiddleware() gin.HandlerFunc {  return func(c *gin.Context) {     //先執行請求    c.Next()    // 發生了錯誤    if len(c.Errors) > 0 {    //獲取最后一個error 返回      err := c.Errors.Last()      Fail(c, http.StatusInternalServerError, err.Error())      return    }          }}

NAq28資訊網——每日最新資訊28at.com

使用中間件NAq28資訊網——每日最新資訊28at.com

func main() {  r := gin.New()  r.Use(middleware.GlobalErrorMiddleware())  r.GET("/test2", func(c *gin.Context) {    m := map[string]interface{}{      "lang": "go",            }     data:=Result{     Data: m,    }        middleawre.Ok(http.Status.OK,data)  })    r.Run(":8080")}

NAq28資訊網——每日最新資訊28at.com

使用postman 返回NAq28資訊網——每日最新資訊28at.com

圖片圖片NAq28資訊網——每日最新資訊28at.com

NAq28資訊網——每日最新資訊28at.com

由此,我們看到了Gin提供的中間件的威力,中間件可以幫助我們做很多中間的事情。NAq28資訊網——每日最新資訊28at.com

通過定義統一的返回結構,使得我們的所有接口都可以以相同的數據結構展示給需要調用接口的人。大大提高了代碼的可讀性和維護性。NAq28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-34899-0.htmlGin 實現統一異常處理和封裝統一返回結果

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 使用Python文本分析:數據讀取編碼錯誤問題處理

下一篇: 分享一個 Python 處理音頻的庫

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 正蓝旗| 沙湾县| 抚州市| 丹东市| 镶黄旗| 台中市| 蓝田县| 武汉市| 延寿县| 湘潭县| 阳谷县| 隆尧县| 阿克苏市| 郑州市| 广河县| 邓州市| 德保县| 香格里拉县| 南川市| 柳林县| 万载县| 新巴尔虎左旗| 三原县| 图木舒克市| 永和县| 敖汉旗| 当雄县| 南岸区| 罗江县| 招远市| 山东省| 奉化市| 安吉县| 新疆| 淮北市| 武川县| 新田县| 托克逊县| 云霄县| 维西| 濉溪县|