亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Go中進行恐慌恢復與嘗試其他語言的捕獲

在Go中進行恐慌恢復與嘗試其他語言的捕獲

Go
絕地無雙 2021-04-14 16:14:11
我剛剛閱讀了有關Go中Panic / Recover的帖子,但尚不清楚它與其他主流語言中的try / catch有何不同。
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

我一直在思考這個問題,以尋求最佳答案。僅僅指出恐慌/恢復的慣用用法,而不是try / catch&| 其他語言中的例外或這些成語背后的概念(可以概括為“例外應僅在真正特殊的情況下發生”)

但是,它們之間的實際區別是什么?我會盡力總結一下。

try / catch塊相比,主要區別之一是控制流的方式。在典型的try / catch場景中,除非傳播錯誤,否則catch塊之后的代碼將運行。對于panic / recover并非如此。緊急情況會中止當前函數,并開始展開堆棧,并在遇到延遲函數時運行延遲函數(唯一的地方recover會執行任何操作)。

真的,我會更進一步:恐慌/恢復幾乎沒有像try / catch那樣的意思,因為try和catch是(或至少表現得像)控制結構,而panic / recover不是。

這實際上源于以下事實:恢復是圍繞延遲機制構建的,據我所知,延遲機制在Go中是一個非常獨特的概念。

當然還有更多,如果我能更好地激發自己的想法,我會添加更多內容。


查看完整回答
反對 回復 2021-04-26
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

緊急/恢復范圍內的功能。這就像說您在每個函數中只允許一個try / catch塊,而try必須覆蓋整個函數。這使得以Java / python / c#等使用異常的相同方式使用Panic / Recover非常令人討厭。這是故意的。這也鼓勵人們以設計使用的方式使用Panic / Recover。您應該從panic()中恢復(),然后將錯誤值返回給調用方。


查看完整回答
反對 回復 2021-04-26
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

我認為我們都同意panicthrow,recovercatchdeferfinally。

最大的區別似乎recover就在里面defer?;氐絺鹘y術語,它使您可以準確地決定要在哪一點上finally打擾catch任何事情,或者根本不打擾。


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號