3 回答

TA貢獻1735條經驗 獲得超5個贊
我一直在思考這個問題,以尋求最佳答案。僅僅指出恐慌/恢復的慣用用法,而不是try / catch&| 其他語言中的例外或這些成語背后的概念(可以概括為“例外應僅在真正特殊的情況下發生”)
但是,它們之間的實際區別是什么?我會盡力總結一下。
與try / catch塊相比,主要區別之一是控制流的方式。在典型的try / catch場景中,除非傳播錯誤,否則catch塊之后的代碼將運行。對于panic / recover并非如此。緊急情況會中止當前函數,并開始展開堆棧,并在遇到延遲函數時運行延遲函數(唯一的地方recover會執行任何操作)。
真的,我會更進一步:恐慌/恢復幾乎沒有像try / catch那樣的意思,因為try和catch是(或至少表現得像)控制結構,而panic / recover不是。
這實際上源于以下事實:恢復是圍繞延遲機制構建的,據我所知,延遲機制在Go中是一個非常獨特的概念。
當然還有更多,如果我能更好地激發自己的想法,我會添加更多內容。

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

TA貢獻1995條經驗 獲得超2個贊
我認為我們都同意panic
是throw
,recover
是catch
和defer
是finally
。
最大的區別似乎recover
就在里面defer
?;氐絺鹘y術語,它使您可以準確地決定要在哪一點上finally
打擾catch
任何事情,或者根本不打擾。
- 3 回答
- 0 關注
- 283 瀏覽
添加回答
舉報