Go語言的學(xué)習(xí) —— panic 和 recover
本專欄僅作為Up本人對于學(xué)習(xí)Go語言過程中的一些記錄和心得,如有錯誤,還請指出~~

Less is More.

Go的異常處理
正如前面所提到的“Less is More”, Go語言追求簡潔優(yōu)雅,所以Go語言并不支持try...catch...finally這種異常處理。Go語言區(qū)分了錯誤和異常,在Go語言中,錯誤相當(dāng)于Java中"Exception",而異常則是需要人工介入的重大錯誤。既然程序是人寫的,那難免會產(chǎn)生bug,那當(dāng)程序產(chǎn)生異常時,程序員要怎么去處理這些異常呢。這里,我們就需要用到panic了。
什么是panic
When you panic in Go, you’re freaking out, it’s not someone elses problem, it’s game over man.
Panic這個單詞的意思是恐慌,在Go語言中作為關(guān)鍵字可以理解為程序運行時恐慌。在Go協(xié)程中使用panic,會終結(jié)并殺死該協(xié)程。
比方說:
我們用菜鳥教程里的在線工具(https://c.runoob.com/compile/21/)嘗試去運行一下上面的代碼,我們會發(fā)現(xiàn)程序輸出了“Link Start!”,隨后便是被“panic”了,并沒有輸出最后的“Link Failed...”。

在某些情況下,我們并不想直接結(jié)束這個協(xié)程,那這時就輪到recover上場了。
用recover來控制panic
recover,顧名思義就是恢復(fù),用來控制一個goroutine的panicking行為,捕獲panic,從而影響應(yīng)用的行為。但必須在代碼中先聲明defer,否則不能正常捕獲panic。
舉個栗子:
OK,我們發(fā)現(xiàn)在輸出中已經(jīng)沒有了panic的身影。相反,我們可以知道panic被捕獲了。

END

相關(guān)文章:
https://zhuanlan.zhihu.com/p/87345297
https://zhuanlan.zhihu.com/p/373653492
https://zhuanlan.zhihu.com/p/222367644
https://juejin.cn/post/7186269730934620220