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

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

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

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

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

wDb28資訊網——每日最新資訊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}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

wDb28資訊網——每日最新資訊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"`    // 響應數據}

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

接下來我們要給 Result 提供幾個常用的方法,比如出現異常時候需要調用的方法,正常情況下需要調用的方法。wDb28資訊網——每日最新資訊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,  })}

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

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

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

wDb28資訊網——每日最新資訊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    }          }}

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

使用中間件wDb28資訊網——每日最新資訊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")}

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 印度登月最關鍵一步!月船三號今晚進入環月軌道

    8月5日消息,據印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進入環月軌道。這是該探測器能夠成功的最關鍵步驟之一,如果成功將開始圍
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就“胡錫進炒股是否知道認真報道”展開討論。有
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
Top 主站蜘蛛池模板: 武冈市| 绥中县| 柞水县| 衡阳市| 于都县| 伊宁县| 南江县| 尤溪县| 乌恰县| 将乐县| 犍为县| 江华| 芦溪县| 普安县| 朝阳县| 鄂托克旗| 额尔古纳市| 金秀| 沧州市| 桓台县| 衡山县| 北京市| 万载县| 普格县| 井研县| 云浮市| 德钦县| 兴文县| 田东县| 阜康市| 商城县| 潢川县| 平谷区| 台湾省| 大丰市| 哈密市| 麻城市| 城市| 荣成市| 城固县| 满洲里市|