91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang中的異常處理機制是什么

發布時間:2021-07-06 15:35:33 來源:億速云 閱讀:151 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關golang中的異常處理機制是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

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()函數中,直至進程結束。

關于golang中的異常處理機制是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江达县| 渝中区| 保山市| 定兴县| 长子县| 依安县| 永嘉县| 平乡县| 平武县| 滨州市| 乌拉特中旗| 潞城市| 光泽县| 景谷| 樟树市| 犍为县| 江源县| 连平县| 呼伦贝尔市| 宣威市| 灵寿县| 望江县| 上栗县| 荥经县| 石棉县| 松潘县| 衡阳县| 建昌县| 绍兴市| 民丰县| 合山市| 邓州市| 呼伦贝尔市| 山阴县| 定结县| 塔河县| 乐亭县| 景德镇市| 德令哈市| 焦作市| 青川县|