AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Gin 實(shí)現(xiàn)統(tǒng)一異常處理和封裝統(tǒng)一返回結(jié)果

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

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

lzF28資訊網(wǎng)——每日最新資訊28at.com

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

lzF28資訊網(wǎng)——每日最新資訊28at.com

錯誤碼這里有5位 lzF28資訊網(wǎng)——每日最新資訊28at.com

1
lzF28資訊網(wǎng)——每日最新資訊28at.com

01
lzF28資訊網(wǎng)——每日最新資訊28at.com

01
lzF28資訊網(wǎng)——每日最新資訊28at.com

錯誤級別,如服務(wù)級
lzF28資訊網(wǎng)——每日最新資訊28at.com

模塊級,如用戶模塊
lzF28資訊網(wǎng)——每日最新資訊28at.com

具體的錯誤碼,如用戶名錯誤
lzF28資訊網(wǎng)——每日最新資訊28at.com

lzF28資訊網(wǎng)——每日最新資訊28at.com

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

lzF28資訊網(wǎng)——每日最新資訊28at.com

lzF28資訊網(wǎng)——每日最新資訊28at.com

為了讓這些錯誤信息以及正常情況的返回數(shù)據(jù)都有統(tǒng)一的結(jié)構(gòu)來管理,我們需要先定義一個統(tǒng)一返回的數(shù)據(jù)結(jié)構(gòu)體。lzF28資訊網(wǎng)——每日最新資訊28at.com

要想實(shí)現(xiàn)統(tǒng)一的異常處理,我們需要借助Gin提供的中間件功能去在返回數(shù)據(jù)之前,攔截到出現(xiàn)的錯誤,在這里重新包裝成我們定義的統(tǒng)一結(jié)構(gòu)體。lzF28資訊網(wǎng)——每日最新資訊28at.com

lzF28資訊網(wǎng)——每日最新資訊28at.com

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

lzF28資訊網(wǎng)——每日最新資訊28at.com

接下來我們要給 Result 提供幾個常用的方法,比如出現(xiàn)異常時候需要調(diào)用的方法,正常情況下需要調(diào)用的方法。lzF28資訊網(wǎng)——每日最新資訊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  不需要返回數(shù)據(jù) datafunc Ok(c *gin.Context, code int) {  c.JSON(code, Result{    Code:    code,    Message: message,    Data:    nil,  })}//接口執(zhí)行正常 需要返回數(shù)據(jù) datafunc Ok(c *gin.Context, code int, message string, data interface{} ) {  c.JSON(code, Result{    Code:    code,    Message: message,    Data:    data,  })}//接口執(zhí)行正常 需要返回數(shù)據(jù) datafunc Ok(c *gin.Context, code int, data interface{} ) {  c.JSON(code, Result{    Code:    code,    Message: "ok",    Data:    data,  })}

lzF28資訊網(wǎng)——每日最新資訊28at.com

lzF28資訊網(wǎng)——每日最新資訊28at.com

實(shí)現(xiàn)攔截返回結(jié)果的中間件lzF28資訊網(wǎng)——每日最新資訊28at.com

lzF28資訊網(wǎng)——每日最新資訊28at.com

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

lzF28資訊網(wǎng)——每日最新資訊28at.com

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

lzF28資訊網(wǎng)——每日最新資訊28at.com

使用postman 返回lzF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片lzF28資訊網(wǎng)——每日最新資訊28at.com

lzF28資訊網(wǎng)——每日最新資訊28at.com

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

通過定義統(tǒng)一的返回結(jié)構(gòu),使得我們的所有接口都可以以相同的數(shù)據(jù)結(jié)構(gòu)展示給需要調(diào)用接口的人。大大提高了代碼的可讀性和維護(hù)性。lzF28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-34899-0.htmlGin 實(shí)現(xiàn)統(tǒng)一異常處理和封裝統(tǒng)一返回結(jié)果

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

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月安卓手機(jī)好評榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機(jī)好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 5月安卓手機(jī)好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機(jī)好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 掘力計劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發(fā)實(shí)戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負(fù)責(zé)人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 一年經(jīng)驗(yàn)在二線城市面試后端的經(jīng)驗(yàn)分享

    忠告這篇文章只適合2年內(nèi)工作經(jīng)驗(yàn)、甚至沒有工作經(jīng)驗(yàn)的朋友閱讀。如果你是2年以上工作經(jīng)驗(yàn),請果斷劃走,對你沒啥幫助~主人公這篇文章內(nèi)容來自 「升職加薪」星球星友 的投稿,坐
  • 三言兩語說透設(shè)計模式的藝術(shù)-單例模式

    寫在前面單例模式是一種常用的軟件設(shè)計模式,它所創(chuàng)建的對象只有一個實(shí)例,且該實(shí)例易于被外界訪問。單例對象由于只有一個實(shí)例,所以它可以方便地被系統(tǒng)中的其他對象共享,從而減少
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁“充值中心”入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網(wǎng)消息,據(jù)彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進(jìn)口電腦/平板及顯示器等產(chǎn)品后,蘋果、三星電子和惠普等大公司暫停向印度
  • 蘋果140W USB-C充電器:采用氮化鎵技術(shù)

    據(jù)10 月 30 日 9to5 Mac 消息報道,當(dāng)蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機(jī)型的盒子里,也支
  • 聯(lián)想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個平板

    ThinkBook Plus 是聯(lián)想的一個特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據(jù)有人爆料,聯(lián)想的下一款 ThinkBook Plus 可能更特殊,它
Top