欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何理解Go錯(cuò)誤處理之用panic取代rr!=nil的模式

這篇文章主要介紹“如何理解Go錯(cuò)誤處理之用panic取代rr != nil的模式”,在日常操作中,相信很多人在如何理解Go錯(cuò)誤處理之用panic取代rr != nil的模式問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何理解Go錯(cuò)誤處理之用panic取代rr != nil的模式”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司是一家以網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站營(yíng)銷(xiāo)、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為集裝箱等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。

為什么想替換

在 Go 語(yǔ)言中 if err != nil 寫(xiě)的太多,還要管方法聲明各種,嫌麻煩又不方便:

err := foo() if err != nil {      //do something..      return err }  err := foo() if err != nil {      //do something..      return err }  err := foo() if err != nil {      //do something..      return err }  err := foo() if err != nil {      //do something..      return err }

上述還是示例代碼,比較直面。若是在工程實(shí)踐,還得各種 package 跳來(lái)跳去加 if err != nil,講更繁瑣,要去關(guān)心整體的上下游。

其余更具體的就不贅述了,可以關(guān)注我的公眾號(hào)翻看先前的文章。

怎么替換 err != nil

不想寫(xiě) if err != nil 的代碼,方式之一就是用 panic 來(lái)替代他。

示例代碼如下:

func GetFish(db *sql.DB, name string) []string {  rows, err := db.Query("select name from users where `name` = ?", name)  if err != nil {   panic(err)  }  defer rows.Close()   var names []string  for rows.Next() {   var name string   err := rows.Scan(&name)   if err != nil {    panic(err)   }    names = append(names, name)  }   err = rows.Err()  if err != nil {   panic(err)  }   return names }

在上述業(yè)務(wù)代碼中,我們通過(guò) panic 的方式取代了 return err 的函數(shù)返回,自然其所關(guān)聯(lián)的下游業(yè)務(wù)代碼也就不需要編寫(xiě) if err !=  nil 的代碼:

func main() {  fish2 := GetFish(db, "煎魚(yú)")  fish3 := GetFish(db, "咸魚(yú)")  fish4 := GetFish(db, "摸魚(yú)")  ... }

同時(shí)在轉(zhuǎn)換為使用 panic 模式的錯(cuò)誤機(jī)制后,我們必須要在外層增加 recover 方法:

func AppRecovery() gin.HandlerFunc {  return func(c *gin.Context) {   defer func() {    if err := recover(); err != nil {     if _, ok := err.(AppErr); ok {      // do something...     } else {      panic(err)     }    }   }()  } }

每次 panic 后根據(jù)其拋出的錯(cuò)誤進(jìn)行斷言,識(shí)別是否定制的 AppErr 錯(cuò)誤類型,若是則可以進(jìn)行一系列的處理動(dòng)作。

否則可繼續(xù)向上 panic 拋出給頂級(jí)的 Recovery 方法進(jìn)行處理。

這就是一個(gè)相對(duì)完整的 panic 錯(cuò)誤鏈路處理了。

優(yōu)缺點(diǎn)

  • 從優(yōu)點(diǎn)上來(lái)講:

    • 整體代碼結(jié)構(gòu)看起來(lái)更加的簡(jiǎn)潔,僅專注于實(shí)現(xiàn)邏輯即可。

    • 不需要關(guān)注和編寫(xiě)冗雜的 if err != nil 的錯(cuò)誤處理代碼。

  • 從缺點(diǎn)上來(lái)講:

    • 認(rèn)知負(fù)擔(dān)的增加,需要參加項(xiàng)目的每一個(gè)新老同學(xué)都清楚該模式,要做一個(gè)基本規(guī)范或培訓(xùn)。

    • 存在一定的性能開(kāi)銷(xiāo),每次 panic 都存在用戶態(tài)的上下文切換。

    • 存在一定的風(fēng)險(xiǎn)性,一旦 panic 沒(méi)有 recover 住,就會(huì)導(dǎo)致事故。

    • Go 官方并不推薦,與 panic 本身的定義相違背,也就是 panic 與 error 的概念混淆。

到此,關(guān)于“如何理解Go錯(cuò)誤處理之用panic取代rr != nil的模式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)頁(yè)名稱:如何理解Go錯(cuò)誤處理之用panic取代rr!=nil的模式
本文網(wǎng)址:http://aaarwkj.com/article48/gpgchp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航品牌網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)云服務(wù)器、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
亚洲综合日韩精品国产av| 中午字幕久久亚洲精品| 日韩精品熟妻人女亚洲一区 | 欧美亚洲国产精品综合在线| 欧美日本在线区一区二| 加勒比人妻一区二区三区| 久久免费看少妇高潮免费| 日韩欧美高清一区二区| 成年爽片在线观看播放欧美| 97在线观看视频在线观看| 国产高清视频不卡在线| 91口爆吞精国产对白| 国产欧美日韩亚洲综合在线| 最新日韩精品电影在线网| 丰满人妻被猛烈进入中| 97免费观看在线观看| 亚洲天堂av在线播放| 午夜最新福利在线视频| 91精品日日躁夜夜躁欧美| 日本在线人妻中文字幕| 亚洲 欧美 日韩一区| 国内极品尤物视频在线| 免费精品黑人一区二区三区| 五月天亚洲激情综合av| 亚洲av成人在线不卡| 插入内射视频在线观看| 成人自拍偷拍在线视频| 中文字幕久精品视频免费| 亚洲精品国产精品乱码| 人妻91一区二区三区| 日韩电影一区二区在线观看中文字幕| 午夜福利片免费在线观看| 亚洲天堂中文字幕麻豆| 久久人妻一区二区三区免费| 欧美国内日本一区二区| 少妇被又粗又硬猛烈进视频| 国产成人国产三级国产精品| 亚洲精品一区二区激情| 欧美国内日本一区二区| 欧美一级午夜欧美午夜视频| 免费毛片一区二区三区四区|