精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美色图免费看| 国产精品色哟哟网站| 久久av在线播放| 激情av中文字幕| 女生影院久久| 日韩毛片在线免费观看| 国产女主播一区二区| 色老头在线视频| 欧美私人啪啪vps| 亚洲欧美精品一区| 不用播放器的免费av| 欧美另类老肥妇| 亚洲视频在线观看一区| 久久精品日韩精品| 国产高清视频免费观看| 亚洲主播在线| 久久99亚洲热视| 99久久久无码国产精品衣服| 美国十次综合久久| 日本韩国一区二区三区视频| 四虎4hu永久免费入口| 可以在线观看的黄色| 国产精品一区二区在线观看网站 | 成人影院在线观看| 91麻豆国产香蕉久久精品| 成人午夜在线影院| 国产一级片免费视频| 99精品国产在热久久下载| 美女国内精品自产拍在线播放| 91网站免费入口| 黑色丝袜福利片av久久| 91麻豆精品91久久久久久清纯| 黄色高清无遮挡| 黄色污网站在线观看| 亚洲色图在线视频| 免费看啪啪网站| 成人在线观看免费| 久久久不卡影院| 欧美aaaaa喷水| 亚洲av成人无码网天堂| 成人听书哪个软件好| 91免费欧美精品| 亚洲系列在线观看| 久久99精品国产.久久久久久| 青青草一区二区| 国产精品999在线观看| 亚洲第一区色| 久久久久久久久爱| 久久r这里只有精品| 亚洲国产精品久久久天堂| 精品久久久91| 久久福利免费视频| 国产精品久久久久9999赢消| 日韩在线视频免费观看| 国产精品一区二区亚洲| 成人激情在线| 日韩在线观看你懂的| 懂色av蜜桃av| 四季av在线一区二区三区| 最近2019中文字幕第三页视频| 中文字幕第24页| 日韩1区在线| 精品国产一区二区三区久久久| 日韩av毛片在线观看| 国产国产精品| 色综合91久久精品中文字幕 | 欧美视频不卡中文| 中文字幕乱码人妻综合二区三区| av日韩亚洲| 欧美色精品天天在线观看视频| 一区二区免费av| 国语精品视频| 亚洲国产成人久久综合| theav精尽人亡av| 欧美精品一区二区三区中文字幕 | 国内在线视频| 免费久久精品视频| 国产精品久久久久久久久| 最近国语视频在线观看免费播放| 久久国内精品自在自线400部| 成人黄色片在线| www.五月天激情| 91视频观看视频| 亚洲人成网站在线观看播放| 伊人在我在线看导航| 亚洲妇熟xx妇色黄| 国产精品无码av无码| gogo大尺度成人免费视频| 日韩免费看网站| 中文字幕在线免费看线人| 欧美日韩在线观看视频小说| 欧美成人精品在线| 国产污污视频在线观看| 久久精品国产秦先生| 国产精品一区二区av| 国产黄色片在线观看| 一区二区三区四区在线播放| 日韩av在线综合| 亚洲福利影视| 精品无人国产偷自产在线| 九九热久久免费视频| 亚洲伦理一区| 成人免费看吃奶视频网站| 日批视频免费播放| 国产精品久久久一本精品| 夜夜添无码一区二区三区| 亚洲天堂1区| 亚洲高清色综合| 开心激情五月网| 久久视频一区| 动漫美女被爆操久久久| 男人在线资源站| 欧美丝袜第一区| 男插女视频网站| 日韩伦理一区| 日本一区二区在线免费播放| 精品人妻一区二区三区浪潮在线| 欧美激情综合在线| 一二三四视频社区在线| 精品中文字幕一区二区三区四区| 亚洲社区在线观看| 黄色片视频网站| 国产精品一区免费视频| 一本一道久久a久久综合精品| 国产99在线| 精品国产sm最大网站免费看| 国产精品视频一区二区三| 日本v片在线高清不卡在线观看| 国产午夜精品在线| 国产一线二线在线观看| 91精品国产一区二区三区| 国产亚洲精品精品精品| 久久久一二三| 久久99欧美| av中文字幕电影在线看| 精品少妇一区二区三区在线播放| 国产免费一区二区三区四区| 免费观看成人av| 亚洲精美视频| 国产91欧美| 中文字幕欧美精品在线| 久久人人爽人人爽人人片av免费| 91女厕偷拍女厕偷拍高清| 日本丰满少妇xxxx| 久久大胆人体视频| 性欧美xxxx视频在线观看| 亚洲经典一区二区| 一区二区三区四区视频精品免费 | 91av视频导航| 天堂在线视频免费| 天天综合天天做天天综合| 日韩无码精品一区二区| 99精品国产一区二区青青牛奶 | 国产调教一区二区三区| 国产成人久久精品| 国产三级电影在线观看| 在线中文字幕一区二区| www久久久久久久| 麻豆成人91精品二区三区| 亚洲一区二区三区精品动漫| 亚洲免费一区| 欧美另类极品videosbest最新版本| 国产成a人亚洲精v品无码| 亚洲乱码中文字幕综合| 国产精品91av| 午夜亚洲一区| 深夜福利成人| 国产人与zoxxxx另类91| 欧美精品18videosex性欧美| 天天舔天天干天天操| 欧美体内谢she精2性欧美| 国产传媒国产传媒| 韩国一区二区三区| 欧美不卡在线播放| 国产精品手机在线播放| 国产主播喷水一区二区| 福利在线导航136| 日韩精品在线视频美女| 中文在线字幕免费观| 日韩理论片中文av| 欧美双性人妖o0| 亚洲欧美日韩视频二区| 亚洲欧洲精品一区二区| 日韩激情精品| 欧美综合一区第一页| 婷婷激情在线| 亚洲成人性视频| 中国一级片黄色一级片黄| 亚洲毛片av在线| 欧美做受喷浆在线观看| 美女视频网站久久| 97超碰在线人人| 第一会所亚洲原创| 国产伦精品一区| 91国内外精品自在线播放| 欧美激情久久久久久| 国产综合视频一区二区三区免费| 欧美一区二区三区电影| 91精品国产综合久久久蜜臀九色| 亚洲天堂av老司机| 日韩一级av毛片| 国产福利不卡视频| 丝袜制服一区二区三区| 亚洲网站在线| 久久精品五月婷婷| 女生影院久久| 久久97精品久久久久久久不卡 | 日韩精品视频在线播放| 亚洲熟妇无码久久精品| 午夜在线电影亚洲一区| 91香蕉视频网| 久久久精品国产免费观看同学| 四川一级毛毛片| 青草av.久久免费一区| 久草热视频在线观看| 亚洲成人一区| 手机看片福利永久国产日韩| 久久99精品国产自在现线| 91精品在线看| 久久人体av| 国产成人精品一区| 操人在线观看| 久久777国产线看观看精品| 日本网站在线免费观看视频| 精品亚洲国产视频| 免费看国产片在线观看| 正在播放亚洲一区| 中文在线a天堂| 在线观看av一区二区| 国产精品500部| 亚洲一级在线观看| 国产精品久久久精品四季影院| 亚洲国产高清aⅴ视频| 三级网站在线免费观看| 99re这里只有精品首页| 91精品啪在线观看国产| 国产电影精品久久禁18| 亚洲三级在线视频| 国产精品一区二区果冻传媒| 亚洲欧美视频二区| 日本在线播放一区二区三区| 女性隐私黄www网站视频| 国产欧美日本| 国产网站免费在线观看| 亚洲在线黄色| 那种视频在线观看| 亚洲深夜激情| 国产亚洲欧美在线视频| 国产欧美日韩综合一区在线播放 | av资源在线免费观看| 国产精品欧美久久久久无广告| 手机毛片在线观看| 中文字幕乱码亚洲精品一区| 亚洲精品国产精品国自| 中文字幕不卡三区| 精品少妇一区二区三区密爱| 中文字幕一区二区视频| 三级全黄做爰视频| 亚洲免费电影在线| 日本三级午夜理伦三级三| 偷拍一区二区三区四区| 秋霞精品一区二区三区| 在线观看三级视频欧美| 亚洲一卡二卡在线| 欧美一卡二卡三卡四卡| 亚洲精品无遮挡| 日韩激情视频在线播放| 岛国在线大片| 伦伦影院午夜日韩欧美限制| 狂野欧美激情性xxxx欧美| 7m第一福利500精品视频| 黄色亚洲网站| 国产日韩欧美另类| 97超碰成人| 日本免费一区二区三区| 久久久久免费av| www.射射射| 美国十次了思思久久精品导航| 欧美日韩一区二区三区69堂| 国产精品123区| 久久久久麻豆v国产精华液好用吗| 久久久久久久久久看片| 国产一二三四区| 偷窥少妇高潮呻吟av久久免费 | 欧美一级片在线观看| 欧美视频xxx| 中文字幕精品一区久久久久| 91小视频xxxx网站在线| 奇米影视亚洲狠狠色| 成人噜噜噜噜| 麻豆av一区二区三区| 91日韩视频| 日本成年人网址| 国内精品在线播放| 四虎永久免费影院| 亚洲色图视频免费播放| 国产成人在线播放视频| 欧美日本免费一区二区三区| 神马午夜电影一区二区三区在线观看| 在线午夜精品自拍| 黄色在线网站噜噜噜| 国产这里只有精品| 在线一级成人| 国产精品视频二| 蜜桃传媒麻豆第一区在线观看| 97香蕉碰碰人妻国产欧美| 国产精品看片你懂得| 国产高潮久久久| 日韩视频不卡中文| av一本在线| 欧美性受xxxx白人性爽| 国产精品777777在线播放| 日本不卡免费新一二三区| 亚洲一级二级| 亚洲日本黄色片| 国产午夜精品一区二区| 精品美女久久久久| 精品久久一二三区| av网站大全在线| 91精品国产综合久久久久久蜜臀| 亚洲国产网址| 成年人午夜视频在线观看| 国产精品123区| www.超碰在线观看| 精品视频在线免费看| 欧美日韩激情视频一区二区三区| 欧美激情一二三| 玖玖玖电影综合影院| 椎名由奈jux491在线播放| 日韩精品一区第一页| 特级西西人体wwwww| 亚洲一区二区三区美女| 国产成人精品一区二区无码呦 | 97精品在线播放| 日本高清不卡一区| 你懂的在线播放| 欧美亚洲国产另类| 日韩精品欧美大片| 男人用嘴添女人下身免费视频| 懂色av一区二区三区蜜臀 | 在线免费观看日本欧美爱情大片| 黄色三级视频在线| 亚洲国产精品成人综合 | 小早川怜子影音先锋在线观看| 高清视频一区二区三区| 激情文学一区| 私密视频在线观看| 天天操天天综合网| 飘雪影院手机免费高清版在线观看| 97精品在线观看| 日韩伦理一区二区三区| 精品一区二区中文字幕| 久久精子c满五个校花| 青青国产在线视频| 最新国产成人av网站网址麻豆| av成人亚洲| 日韩视频在线免费播放| 国产精品911| 久久精品视频8| 日韩高清免费在线| 成人黄色免费短视频| 色狠狠久久av五月综合| 国内欧美视频一区二区| 青青草原国产视频| 亚洲国产精品久久久久秋霞蜜臀 | 日本爱爱爱视频| 精品视频在线看| 午夜羞羞小视频在线观看| 国产一区二区三区四区hd| 玖玖精品视频| 国产jizz18女人高潮| 日韩美女视频一区二区在线观看| heyzo高清国产精品| 日本视频一区二区不卡| 精品一区二区三区免费毛片爱| 国产一级视频在线| 亚洲图片欧美日产| 国产一区二区三区黄网站| 日本欧美黄色片| 国产精品美女久久久久久久网站| 99热这里只有精品在线| 777午夜精品福利在线观看| 日本午夜一区| jjzz黄色片| 在线国产电影不卡| 色呦呦在线视频| 日韩资源av在线| 国产精品77777| 国产成人麻豆免费观看| 欧美另类69精品久久久久9999| 亚洲肉体裸体xxxx137| 在线免费黄色网| 精品久久久久久久久国产字幕 | 手机看片福利日韩| 亚洲国产视频a| 日韩美女网站| 久中文字幕一区| 国产精品66部| 国产一级片一区二区| 国内精品模特av私拍在线观看|