golang沒有try...catch...的異常處理結構,而是使用defer、panic、recover來進行異常處理。golang
一、defer,從字面上就是延遲、延期,就是將defer後面的方法延遲到包裹該方法的方法執行返回再執行。函數
從上面一段代碼能夠看出defer有如下特性:性能
1)defer將方法壓入棧中,並最後執行spa
2)多個defer時,聽從後進先出的原則blog
3)defer是將順序運行到該方法時的狀態延遲,效果能夠看i值的變化for循環
4)defer的壓棧和出棧存在性能損耗,避免將defer寫在for循環內部循環
二、panic,系統沒法處理的嚴重錯誤。程序
當程序運行報錯的時候,咱們能夠看到提示上會出現panic的標識。固然咱們也能夠顯示的使用panic函數,但當咱們顯示使用時,其後面的代碼將不運行。方法
三、recover()用來捕獲異常,至關與catch,但recover必須再defer方法內才能生效。im