Go错误处理 11
簡單介紹:Go錯誤處理的方式
這里記錄的是我個人不太熟練的語法和知識
詳細內容移步:李文周的博客(非常詳細)(雖然沒有直接說,其實就是defer、panic、recover)
首先聲明:一直以來,我以為錯誤處理是很高大上的東西,沒怎么碰過,直到…看了這兩份文檔
https://blog.csdn.net/m0_38004619/article/details/98968097
https://www.cnblogs.com/zhangboyu/p/7911190.html
簡單描述:在一個場景中,如果可能出現錯誤,那么首先定義defer + recover語句,接著如果程序panic掉了,defer中的recover就會捕獲panic,然后處理掉。
經典的除零錯誤
panic= runtime error: integer divide by zero
#error&panic區別
Golang中引入error接口類型作為錯誤處理的標準模式,如果函數要返回錯誤,則返回值類型列表中肯定包含error。error處理過程類似于C語言中的錯誤碼,可逐層返回,直到被處理。
Golang中引入兩個內置函數panic和recover來觸發和終止異常處理流程,同時引入關鍵字defer來延遲執行defer后面的函數。
一直等到包含defer語句的函數執行完畢時,延遲函數(defer后的函數)才會被執行,而不管包含defer語句的函數是通過return的正常結束,還是由于panic導致的異常結束。你可以在一個函數中執行多條defer語句,它們的執行順序與聲明順序相反。
當程序運行時,如果遇到引用空指針、下標越界或顯式調用panic函數等情況,則先觸發panic函數的執行,然后調用延遲函數。調用者繼續傳遞panic,因此該過程一直在調用棧中重復發生:函數停止執行,調用延遲執行函數等。如果一路在延遲函數中沒有recover函數的調用,則會到達該攜程的起點,該攜程結束,然后終止其他所有攜程,包括主攜程。
錯誤和異常從Golang機制上講,就是error和panic的區別。很多其他語言也一樣,比如C++/Java,沒有error但有errno,沒有panic但有throw。
總結
- 上一篇: springBoot将excel文件数据
- 下一篇: android 百度地图定位辅助教程