精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊Go 語言的錯誤處理

開發 后端
在 go 語言中,有一個預定義的接口:error,該接口自帶一個 Error() 方法,調用該方法會返回一個字符串。

[[396764]]

構造 error

在 go 語言中,有一個預定義的接口:error,該接口自帶一個 Error() 方法,調用該方法會返回一個字符串。

  1. type error interface { 
  2.   Error() string 

調用該方法,會返回當前錯誤的具體結果。一般有下面幾種方式生成 error。

  • errors.New()
  • fmt.Errorf()

errors.New()

調用 errors.New() 會返回一個 error 類型的結構體,該結構體內部會實現一個 Error() 方法, 調用該方法返回的結果為調用 errors.New() 方法時傳入的內容。

  1. import ( 
  2.  "errors" 
  3.  "fmt" 
  4.  
  5. func divide(a, b int) (error, int) { 
  6.  if b == 0 { 
  7.     // 被除數為0,則構造一個 error 結構體 
  8.   return errors.New("被除數不能為0"), 0 
  9.  } 
  10.  var result = a / b 
  11.  return nil, result 
  12.  
  13. func main() { 
  14.  var err error // error 類型數據的初始值為 nil,類似于 js 中的 null 
  15.  var result int 
  16.  
  17.  err, result = divide(1, 0) 
  18.  
  19.   if err == nil { 
  20.     // 如果 err 為 nil,說明運行正常 
  21.     fmt.Println("計算結果", result) 
  22.   } else { 
  23.     // 如果 err 不為 nil,說明運行出錯 
  24.     // 調用 error 結構體的 Error 方法,輸出錯誤原因 
  25.     fmt.Println("計算出錯", err.Error()) 
  26.   } 

可以看到,上面的代碼中,由于調用 divide 除法方法時,由于傳入的被除數為 0。經過判斷,會拋出一個由 errors.New 構造的 error 類型的結構體。

我們將調用 error.Error() 方法返回的結果輸出到控制臺,可以發現其返回的結果,就是傳入 New 方法的值。

執行結果如下:

fmt.Errorf()

通過 fmt.Errorf() 方法構造的 error 結構體,與調用 errors.New() 方法的結果類似。不同的是,fmt.Errorf() 方法會進行一次數據的格式化。

  1. func divide(a, b int) (error, int) { 
  2.  if b == 0 { 
  3.     // 將參數進行一次格式化,格式化后的字符串放入 error 中 
  4.   return fmt.Errorf("數據 %d 不合法", b), 0 
  5.  } 
  6.  var result = a / b 
  7.  return nil, result 
  8.  
  9. err, result := divide(1, 0) 
  10. fmt.Println("計算出錯", err.Error()) 

執行結果如下:

panic() 與 recover()

panic()

panic() 相當于主動停止程序運行,調用時 panic() 時,需要傳入中斷原因。調用后,會在控制臺輸出中斷原因,以及中斷時的調用堆棧。我們可以改造一下之前的代碼:

  1. func divide(a, b int) (error, int) { 
  2.  if b == 0 { 
  3.     // 如果程序出錯,直接停止運行 
  4.   panic("被除數不能為0"
  5.  } 
  6.  var result = a / b 
  7.  return nil, result 
  8.  
  9. func main() { 
  10.   err, result := divide(1, 0) 
  11.   fmt.Println("計算出錯", err.Error()) 

在運行到 panic() 處,程序直接中斷,并在控制臺打印出了中斷原因。

panic() 可以理解為,js 程序中的 throw new Error() 的操作。那么,在 go 中有沒有辦法終止 panic() ,也就是類似于 try-catch 的操作,讓程序回到正常的運行邏輯中呢?

recover()

在介紹 recover() 方法之前,還需要介紹一個 go 語言中的另一個關鍵字:defer。

defer 后的語句會在函數進行 return 操作之前調用,常用于資源釋放、錯誤捕獲、日志輸出。

  1. func getData(table, sql) { 
  2.   defer 中斷連接() 
  3.   db := 建立連接(table
  4.   data := db.select(sql) 
  5.   return data 

defer 后的語句會被存儲在一個類似于棧的數據結構內,在函數結束的時候,被定義的語句按順序出棧,越后面定義的語句越先被調用。

  1. func divide(a, b intint { 
  2.   defer fmt.Println("除數為", b) 
  3.   defer fmt.Println("被除數為", a) 
  4.  
  5.   result := a / b 
  6.   fmt.Println("計算結果為", result) 
  7.  return result 
  8.  
  9. divide(10, 2) 

上面的代碼中,我們在函數開始運行的時候,先通過 defer 定義了兩個輸出語句,先輸出除數,后輸出被除數。

實際的運行結果是:

  • 先輸出計算結果;
  • 然后輸出被除數;
  • 最后輸出除數;

這和前面提到的,通過 defer 定義的語句會在函數結束的時候,按照出棧的方式進行執行,先定義的后執行。defer 除了會在函數結束的時候執行,出現異常的的時候也會先走 defer 的邏輯,也就是說,我們在調用了 panic() 方法后,程序中斷過程中,也會先將 defer 內的語句運行一遍。

這里我們重新定義之前的 divide 函數,在執行之前加上一個 defer 語句,defer 后面為一個自執行函數,該函數內會調用 recover() 方法。

recover() 方法調用后,會捕獲到當前的 panic() 拋出的異常,并進行返回,如果沒有異常,則返回 nil。

  1. func divide(a, b intint { 
  2.   // 中斷之前,調用 defer 后定義的語句 
  3.  defer func() { 
  4.   if err := recover(); err != nil { 
  5.    fmt.Println("捕獲錯誤", err) 
  6.   } 
  7.  }() 
  8.  
  9.  if b == 0 { 
  10.     // 函數運行被中斷 
  11.   panic("被除數不能為0"
  12.   return 0 
  13.  } 
  14.  
  15.  return a / b 
  16.  
  17. result := divide(1, 0) 
  18. fmt.Println("計算結果", result) 

上面的代碼運行后,我們發現之前調用 panic() 中斷的程序被恢復了,而且后面的計算結果也正常進行輸出了。

這就有點類似于 try-catch 的邏輯了,只是 recover 需要放在 defer 關鍵詞后的語句中,更像是 catch 和 finally 的結合。

本文轉載自微信公眾號「自然醒的筆記本」,可以通過以下二維碼關注。轉載本文請聯系自然醒的筆記本公眾號。

 

責任編輯:武曉燕 來源: 自然醒的筆記本
相關推薦

2014-11-17 10:05:12

Go語言

2021-04-14 07:08:14

Nodejs錯誤處理

2025-03-31 00:29:44

2025-06-06 06:45:54

2021-09-13 07:53:31

Go錯誤處理

2022-09-05 08:55:15

Go2提案語法

2025-06-30 09:49:11

2025-09-05 01:55:00

Go并發錯誤項目

2021-09-27 15:33:48

Go 開發技術

2021-09-27 23:28:29

Go多協程并發

2020-12-17 06:25:05

Gopanic 模式

2023-10-26 15:49:53

Go日志

2021-09-27 10:04:03

Go程序處理

2017-09-22 15:25:40

Go語言其他語言錯誤處理

2023-03-10 08:48:29

2024-03-27 08:18:02

Spring映射HTML

2024-02-28 08:54:57

switchGo錯誤

2022-06-26 23:03:14

Go標準庫語言

2025-02-24 09:30:15

2022-07-13 08:53:28

函數Go語言
點贊
收藏

51CTO技術棧公眾號

欧美 另类 交| 成人国产精品久久久| a毛片毛片av永久免费| 天天综合网站| 亚洲精品视频在线观看免费| 亚洲aaa激情| 国产精品人人人人| 久久国产亚洲| 亚洲第一区在线| 91极品尤物在线播放国产| 国产成人无吗| 久久精品一区蜜桃臀影院| 国产原创欧美精品| 男人的天堂一区二区| 99久久www免费| 日韩av在线不卡| av中文字幕网址| 日韩电影毛片| 一区二区三区精品| 日本一区视频在线| www.com欧美| 美女在线视频一区| 欧美一区二区三区艳史| 亚洲免费成人在线视频| 久久露脸国产精品| 久久综合久久鬼色中文字| 精品国产欧美日韩一区二区三区| 午夜福利一区二区三区| 7777久久香蕉成人影院| 日韩av在线免费| 欧美色图校园春色| 麻豆传媒在线看| 中文字幕一区二区三区人妻在线视频 | 日本a级片电影一区二区| 亚洲精品卡一卡二| 欧美精品一二| 亚洲欧美日韩爽爽影院| 中文字幕99页| 亚洲超碰在线观看| 欧美电影影音先锋| www.com污| 欧美日韩五区| 一本一道久久a久久精品综合蜜臀| 男同互操gay射视频在线看| av在线播放免费| 91香蕉视频污| 韩国一区二区三区美女美女秀| 999av视频| 国产毛片精品国产一区二区三区| 国产精品久久中文| 伊人网免费视频| 日日夜夜免费精品| 国产精品www| 中文字幕日韩免费| 天堂av在线一区| 91精品国产91久久久久久不卡| 久久在线视频精品| 伊人狠狠色j香婷婷综合| 欧美大片大片在线播放| 久久久久99精品成人片毛片| 欧美激情1区| 欧美精品激情视频| 国产乡下妇女做爰毛片| 亚洲国产日韩欧美一区二区三区| 欧美精品久久久久久久| 国产真实夫妇交换视频| 一本色道久久综合亚洲精品不卡| 久久久在线视频| 日本va欧美va国产激情| 亚洲一级在线| 国产精品久久77777| 自拍偷拍精品视频| 狠狠v欧美v日韩v亚洲ⅴ| 91在线|亚洲| 日本黄色大片视频| 久久嫩草精品久久久精品一| 五月天亚洲综合小说网| 免费在线观看av片| 亚洲国产精品尤物yw在线观看| 波多野结衣综合网| 日韩pacopacomama| 欧美日韩大陆一区二区| 永久看看免费大片| 欧美绝顶高潮抽搐喷水合集| 尤物tv国产一区| 日韩影院一区二区| 亚洲每日更新| 国产精品久久久久影院日本| 国产aⅴ一区二区三区| 波多野结衣中文一区| 欧美三级电影在线播放| 色老头视频在线观看| 亚洲影视在线播放| 精品久久久久av| 不卡一区视频| 亚洲国内精品视频| 蜜桃av.com| 日韩亚洲国产精品| 国产噜噜噜噜噜久久久久久久久 | 香蕉久久久久久| 亚洲成在人线av| 免费看黄色的视频| 欧美91福利在线观看| 欧美一级免费视频| 国产强伦人妻毛片| 国产欧美精品一区| av在线观看地址| 亚洲天堂1区| 亚洲精品成人av| 天天色天天综合| 亚洲尤物在线| 国产66精品久久久久999小说| 久久久久久久久亚洲精品| 亚洲欧美色图小说| 少妇黄色一级片| 乱中年女人伦av一区二区| 色av吧综合网| 天堂网视频在线| 成人一二三区视频| 宅男一区二区三区| 香蕉成人av| 亚洲精品电影久久久| 欧美性x x x| 美女视频网站黄色亚洲| 欧美精品一区二区三区在线看午夜| 91麻豆国产福利在线观看宅福利| 欧美偷拍一区二区| 亚洲最大的黄色网| 亚洲视频中文| 亚洲一区二区三区四区在线播放 | 欧美成人免费一级人片100| 国产99久久久久久免费看| 不卡一区二区在线| 91免费国产精品| 国产欧美88| www.xxxx欧美| 在线观看国产黄| 国产精品视频在线看| 国产男女激情视频| 久久五月天色综合| 久久在精品线影院精品国产| 亚洲欧美综合自拍| 99v久久综合狠狠综合久久| 欧美黄色免费网址| 日韩精品三级| 欧美日本精品在线| 性一交一乱一伧老太| 亚洲欧美一区二区久久| 天天综合天天添夜夜添狠狠添| 成人情趣视频| 国产精品亚洲美女av网站| 国产午夜在线观看| 欧美无人高清视频在线观看| 精品无码人妻一区二区免费蜜桃| 日日夜夜精品免费视频| 色爱区成人综合网| 成人亚洲免费| 久久综合免费视频影院| 国产毛片久久久久| 亚洲精品日韩一| 在线播放第一页| 亚洲精品护士| 蜜桃91精品入口| 久久天堂av| 日韩在线观看免费全| av一区二区三| 午夜精品福利在线| 自拍偷拍视频亚洲| 狠狠色丁香婷婷综合久久片| 国产一级大片免费看| 久久精品福利| 国产不卡在线观看| 日韩专区在线| 日韩一区二区不卡| 色网站在线播放| 国产亚洲欧洲997久久综合| 天天爽夜夜爽一区二区三区| 欧美大片aaaa| 成人欧美一区二区三区视频| 新版的欧美在线视频| 中文字幕久久久| 午夜精品久久久久久久第一页按摩| 一个色综合av| 乐播av一区二区三区| 极品美女销魂一区二区三区| 美女av免费观看| 蜜桃精品wwwmitaows| 国产日本欧美视频| 伦理av在线| 亚洲深夜福利网站| www.黄色一片| 欧美在线综合视频| 国产精彩视频在线观看| 国产亚洲欧美日韩日本| 人妻精油按摩bd高清中文字幕| 国产视频一区三区| 中文字幕中文字幕在线中一区高清| 亚洲小说春色综合另类电影| 国产精品9999| 好久没做在线观看| 中文字幕日韩免费视频| 特级丰满少妇一级aaaa爱毛片| 欧美色国产精品| 精品少妇久久久久久888优播| 国产三区在线成人av| 精品无码av一区二区三区| 日韩精品电影在线观看| 拔插拔插海外华人免费| 国产精品精品国产一区二区| 久久精品国产综合精品| 欧美专区视频| 国产精品白嫩初高中害羞小美女| 免费在线观看av电影| 最新69国产成人精品视频免费| 熟妇人妻系列aⅴ无码专区友真希| 欧美福利一区二区| 福利网址在线观看| 亚洲大片免费看| 国产福利视频网站| 国产欧美一区二区精品秋霞影院| 国产伦精品一区三区精东| 久久99深爱久久99精品| 麻豆av免费在线| 一道本一区二区| 青青草视频在线视频| 欧美高清在线| 午夜欧美一区二区三区免费观看| 婷婷成人影院| 国产在线精品二区| 2021年精品国产福利在线| 成人有码视频在线播放| 中文字幕日本一区二区| 日本一本a高清免费不卡| 九九精品调教| 色综合久久中文字幕综合网小说| 亚乱亚乱亚洲乱妇| 日韩中文理论片| h视频在线免费| 中文字幕日韩欧美在线| 国产在线一二| 亚洲夜晚福利在线观看| 男人天堂综合| 亚洲欧美资源在线| 国产在线三区| 夜夜嗨av一区二区三区免费区| 黄色av网址在线免费观看| 日韩精品中文字幕在线| 亚洲色欧美另类| 日韩成人免费视频| 青青色在线视频| 亚洲天堂av网| 3d成人动漫在线| 久久激情视频久久| 亚洲丝袜精品| 久久久久久久久久亚洲| sm捆绑调教国产免费网站在线观看 | 动漫美女无遮挡免费| av成人免费在线观看| 少妇户外露出[11p]| 久久美女艺术照精彩视频福利播放 | 97人妻精品视频一区| 欧美日韩在线播放三区四区| 伊人免费在线观看| 欧美一区二区三区小说| 亚洲AV无码国产精品午夜字幕| 精品国产人成亚洲区| 视频国产在线观看| 国产午夜精品视频| 日本激情在线观看| 欧美激情欧美激情| 一区二区电影免费观看| 国产精品777| 精品一区二区三区免费看| 国产精品国色综合久久| 人人精品亚洲| 亚洲午夜精品国产| 欧美精品国产一区二区| 国产精品专区在线| 青青草国产成人99久久| 在线观看免费看片| 26uuu国产日韩综合| 看免费黄色录像| 午夜精品福利一区二区三区蜜桃| 自拍偷拍精品视频| 精品美女一区二区三区| 嫩草在线播放| 日韩中文字幕国产| 丰满的护士2在线观看高清| 日本精品va在线观看| 亚洲老司机网| 精品国产一区二区三区四区vr| 精品国产一区二区三区久久久蜜臀 | 美女做暖暖视频免费在线观看全部网址91| 色哟哟网站入口亚洲精品| 超碰在线资源| 国产女同一区二区| 美女视频免费精品| 中文字幕中文字幕99| 午夜一级久久| 中文字幕人妻无码系列第三区| 久久久国产午夜精品| 免费麻豆国产一区二区三区四区| 日韩欧美成人精品| 精品人妻一区二区三区蜜桃| 亚洲午夜精品久久久久久久久久久久| av免费在线观| 国产精品日韩久久久久| 久久资源综合| 成人在线观看www| 日韩精品一级中文字幕精品视频免费观看 | 久久久久久福利| 欧美视频一区二| 艳母动漫在线看| 久久久精品电影| 成人国产精品一区二区免费麻豆 | 婷婷中文字幕综合| 国产成人精品一区二区无码呦 | 国产在线综合视频| 午夜精品久久久久久久99水蜜桃 | 国产一区二区动漫| 国产免费拔擦拔擦8x高清在线人| 成人精品久久一区二区三区| 精品国产91久久久久久浪潮蜜月| 成人午夜视频在线观看免费| 国产一区二区三区四区五区入口| 成年人免费观看视频网站| 亚洲成人综合在线| 国产aⅴ爽av久久久久成人| 色吧影院999| 91九色综合| 日本午夜精品一区二区| 国产一区二区三区的电影 | 久久九九热re6这里有精品| 特级西西人体www高清大胆| 久久精品国产第一区二区三区| 四虎永久免费影院| 婷婷丁香久久五月婷婷| 成人久久久精品国产乱码一区二区| 久久影院中文字幕| 国产在线一区不卡| 四虎精品欧美一区二区免费| 韩国av一区二区| 可以免费看av的网址| 欧美日韩视频不卡| 免费大片黄在线| 亚洲一区二区三区视频播放| 欧美一区二区三区免费看| 午夜免费福利网站| 一区二区三区丝袜| 亚洲精品久久久久久久久久久久久久| 欧美裸体xxxx极品少妇| 亚洲一区二区三区日本久久九| 黄色特一级视频| 成人精品视频一区二区三区 | 日韩精品一区第一页| av黄色在线免费观看| 91搞黄在线观看| 亚洲s色大片| 91免费看网站| 亚洲人成久久| 欧美熟妇一区二区| 欧美亚洲愉拍一区二区| 欧美精品电影| 91传媒在线免费观看| 红桃视频国产一区| 添女人荫蒂视频| 在线免费观看一区| 久草免费在线| 福利视频一区二区三区| 国产日韩精品视频一区二区三区 | 亚洲综合在线免费观看| 日本免费网站在线观看| 清纯唯美亚洲综合| 久久综合国产| 第一页在线视频| 欧美性xxxxx| 久操免费在线| 久久99精品久久久久久三级| 视频一区视频二区中文| 尤物在线免费视频| 亚洲精品国产免费| 国产精品麻豆成人av电影艾秋| 日本精品免费视频| 97精品国产露脸对白| 中文字幕在线观看免费| 欧美精品国产精品日韩精品| 久久av资源| 欧美污在线观看| 欧美专区在线观看一区| 日本在线视频www鲁啊鲁| 日本午夜精品一区二区三区| 国产精品99久久久久久似苏梦涵| 久久久久久久久影院| 久久久国产成人精品| 亚洲男人都懂第一日本| 亚洲色图偷拍视频| 欧美性猛交xxxx免费看| yellow91字幕网在线| 日本一区二区三区视频免费看| 国产激情视频一区二区在线观看|