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

溫馨提示×

溫馨提示×

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

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

Go語言中panic和recover的作用是什么

發布時間:2021-07-06 15:53:17 來源:億速云 閱讀:347 作者:Leah 欄目:大數據

Go語言中panic和recover的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1. panic使用介紹

panic一旦觸發之后,會按照下面的順序來做處理:

1)panic開始的地方啟動終止程序操作。

2)調用當前觸發panic函數里面的defer函數。

3)返回該函數的調用方,當作異常返回來處理,所以這一步也會調用調用方函數的defer,一直到沒有調用方為止。

4)打印panic的信息。

5)打印堆棧跟蹤信息,也就是我們看到的函數調用關系。

6)終止程序。

例子:

Go語言中panic和recover的作用是什么

結果分析:通過輸出結果我們可以看出,1)2調用了panic開始了panic的操作, 3出不在執行,故沒有打印。2)執行testPanic中的defer函數,輸出了"testPanic exit!" 。3) 接著,返回到調用方main函數,當作異常終止,調用main中的defer函數,打印"main exit!",main中的6處代碼也被跳過執行。4) 打印panic觸發時的錯誤信息"trigger panic!" 。5)打印panic的調用堆棧信息,這里是從觸發panic的點開始的,一層層往上調用。6)退出程序。

2. recover使用介紹

recover是go提供的一個用來截獲panic信息,重新獲取協程控制的函數。它的使用,有兩點需要注意,1)recover只能在defer函數中使用。2)recover的使用必須與觸發panic的協程是同一個協程才行。

例子1,同一個協程中:

Go語言中panic和recover的作用是什么

結果分析:通過調用recover之后的結果來看,panic被1處的recover成功截獲,只是3處到代碼沒有執行而已,對于調用testPanic的main函數后續代碼都被執行了,"main end!"信息也被打印出來了。

例子2,panic和recover在不同協程中,不能恢復

Go語言中panic和recover的作用是什么

結果分析:通過輸出結果可以看出,就算我們在4處調用了rcover,但是panic也沒有被截獲,原因就是panic在子協程中,而recover在主協程中,recover不能跨協程截獲panic信息。

3.補充知識:

  對于panic顯示的函數堆棧調用關系,debug.PrintStack()也可以做到,它就是用來打印函數的堆棧調用關系的, 例子如下所示:

Go語言中panic和recover的作用是什么

下面是panic和recover兩個函數的解釋說明:https://golang.org/src/builtin/builtin.go?h=panic#L232

Go語言中panic和recover的作用是什么


看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

枞阳县| 横峰县| 东台市| 汝城县| 屏山县| 大渡口区| 曲阜市| 新丰县| 白水县| 泾川县| 资兴市| 东宁县| 库伦旗| 平乐县| 成安县| 潮州市| 改则县| 铜山县| 南康市| 兴业县| 青铜峡市| 金华市| 融水| 丰镇市| 香河县| 安徽省| 依安县| 林西县| 河间市| 砚山县| 且末县| 桃江县| 武平县| 宝坻区| 西乡县| 海南省| 安新县| 道孚县| 宜黄县| 绥德县| 玉山县|