好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 深入理解golang的異常處理機制

深入理解golang的異常處理機制

熱門標簽:建造者2地圖標注 濱州自動電銷機器人排名 惠州電銷防封電話卡 釘釘有地圖標注功能嗎 黃岡人工智能電銷機器人哪個好 鄭州亮點科技用的什么外呼系統 浙江高頻外呼系統多少錢一個月 汕頭小型外呼系統 阿里云ai電話機器人

前言

眾所周知在java或php等很多面向對象的語言中, 異常處理是依靠throw、catch來進行的。在go語言中,panic和recover函數在作用層面分別對等throw和catch語句,當然也存在不同之處。下面話不多說,來一起看看詳細的介紹吧。

從設計層面來看,panic和recover函數適用于那些真正的異常(例如整數除0),而throw catch finally機制常常被用來處理一些業務層面的自定義異常。因此在go語言中,panic和recover要慎用。

上述兩種異常機制的使用中,在處理異常時控制流程的走向也是相似的。

下面將分別舉例說明:

try catch finally機制

 try{
 throw new Exception();
 } catch(Exception $e) {
 do something ...
 } finally {
 
 }

這種機制中,我們把可能拋出異常的語句或拋出自定義異常的語句放置到try語句塊中,而在catch塊中,我們將上述語句拋出的異常捕獲,針對不同的異常進行報警或log等處理。之后,控制流程進入到finally語句塊中。若沒有finally語句,控制流程將進入到catch之后的語句中。也就是說,在這種機制中,控制流程是轉移到同一層級中異常捕獲之后的語句中。

panic recover defer機制

在go的異常機制中,panic可以將原有的控制流程中斷,進入到一個"恐慌"流程。這種恐慌流程可以顯式調用panic()函數產生或者由運行時錯誤產生(例如訪問越界的數組下標)。panic會在調用它的函數中向本層和它的所有上層逐級拋出,若一直沒有recover將其捕獲,程序退出后會產生crash;若在某層defer語句中被recover捕獲,控制流程將進入到recover之后的語句中。

 /* example 1 */
 package main
 import (
 "fmt"
 )

 func f() {
 defer func() {
  fmt.Println("b")
  if err := recover();err != nil {
  fmt.Println(err)
  }
  fmt.Println("d")
 }()
 fmt.Println("a")
 panic("a bug occur")
 fmt.Println("c")
 }

 func main() {
 f()
 fmt.Println("x")
 }

在上述舉例中,輸出結果為:

 a
 b
 a bug occur
 d
 x

這說明,在f函數中拋出的panic被自己defer語句中的recover捕獲,然后控制流程進入到recover之后的語句中,即打印d、打印x,之后進程正常退出。

 /* example 2 */
 package main
 import (
  "fmt"
 )

 func g() {
  defer func() {
   fmt.Println("b")
   if err := recover();err != nil {
    fmt.Println(err)
   }
   fmt.Println("d")
  }()
  f()
  fmt.Println("e")
 }

 func f() {
  fmt.Println("a")
  panic("a bug occur")
  fmt.Println("c")
 }

 func main() {
  g()
  fmt.Println("x")
 }

上述案例的輸出結果是:

 a
 b
 a bug occur
 d
 x

進程經歷了這樣一個過程:f()中拋出panic,由于自身沒有定義defer語句,panic被拋到g()中。g()的defer語句中定義了recover,捕獲panic后并執行完defer剩余的語句,之后控制流程被轉交到main()函數中,直至進程結束。

總結

以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Go語言異常處理案例解析
  • Golang中異常處理機制詳解
  • 利用golang實現封裝trycatch異常處理實例代碼
  • go語言異常panic和恢復recover用法實例
  • 小學生也能看懂的Golang異常處理recover panic

標簽:瀘州 昭通 駐馬店 泰安 阿壩 東營 晉中 滄州

巨人網絡通訊聲明:本文標題《深入理解golang的異常處理機制》,本文關鍵詞  深入,理解,golang,的,異常,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入理解golang的異常處理機制》相關的同類信息!
  • 本頁收集關于深入理解golang的異常處理機制的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 花唇用力吞吐h| 337p粉嫩日本欧洲亚洲Av| 大乳一级一区二区三区| 国产精品嫩草影院永久更新时间| 翁熄半推半就| 韩国做爰高潮A片爱的躯壳| 久久成人精品免费播放| 美女极品丰满爆乳翘臀写真| 呻吟求饶喘息粗大捣软| 18秘?免费视频网站| 男生插女生动漫| 91人妻精品无码一区二区密臂| 日本黄色片黄色片| 涩婷婷| 成人午夜婬片A片真人| 欧美一級黃色A片免費看| 蜜臀国产在线| 亚洲va久久久久久久精品小说| 亚洲码欧洲码一二三四五区别| 久久AⅤ天堂Av无码AV泽村| 一女np古代高辣| 免费一级e一片在线播放| 办公室可不可以干湿你补车| 男男上床小说| 久久婷婷激情| 两个大兔子抖来抖去动图| 国模人体极品粉鮑欣赏| 大学生高潮一级A片| 国产成人盗摄一区二区| 被健身房教练玩晕过去| 18一20岁一级毛片| 武则天被下药揉到高潮| FaceSitting坐脸调教| 99综合色| 69成人网| 国产精品秘?麻豆免费版乌克兰 | 欧美粗大猛烈人妖| 男生女生叉叉叉| 国产精品亚洲AV三区爱咪桃| 《年轻女教师2》在线播放| 免费高清特级毛片|