亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

青冈县| 洪湖市| 九寨沟县| 乐陵市| 宁明县| 易门县| 惠东县| 平潭县| 高邑县| 汕尾市| 周至县| 扎鲁特旗| 永宁县| 铜陵市| 从江县| 彭阳县| 临西县| 田东县| 英德市| 阳西县| 若尔盖县| 类乌齐县| 酒泉市| 泸水县| 利川市| 永定县| 酉阳| 丰都县| 封丘县| 南岸区| 岢岚县| 陕西省| 淅川县| 肃北| 齐齐哈尔市| 巨鹿县| 韶山市| 交口县| 邵阳县| 哈密市| 阿鲁科尔沁旗|