Golang中引入error介面類型作為錯誤處理的標準模式,如果函數要回傳錯誤,則傳回值類型清單中肯定包含error。 error處理過程類別
似於C語言中的錯誤碼,可逐層返回,直到被處理。
Golang中引入兩個內建函數panic和recover來觸發和終止異常處理流程,同時引入關鍵字defer來延遲執行defer後面的函數。
一直等到包含defer語句的函數執行完畢時,延遲函數(defer後面的函數)才會被執行,而不管包含defer語句的函數是透過return的正
#常結束,還是由於panic導致的異常結束。你可以在一個函數中執行多條defer語句,它們的執行順序與宣告順序相反。
推薦學習《golang教學》
當程式執行時,如果遇到引用空指標、下標越界或明確呼叫panic函數等情況,則先觸發panic函數的執行,然後呼叫延遲函數。呼叫
者繼續傳遞panic,因此該過程一直在呼叫堆疊中重複發生:函數停止執行,呼叫延遲執行函數等。如果一路在延遲函數中沒有recover
函數的調用,則會到達該攜程的起點,該攜程結束,然後終止其他所有攜程,包括主攜程(類似於C語言中的主線程,該攜程ID為
1)。
錯誤和異常從Golang機制上講,就是error和panic的差別。很多其他語言也一樣,例如C /Java,沒有error但有errno,沒有panic
但有throw。
Golang錯誤和異常是可以互相轉換的:
錯誤轉異常,例如程式邏輯上嘗試請求某個URL,最多嘗試三次,嘗試三次的過程中請求失敗是錯誤,嘗試完第三次還不成功的話,
失敗就被提升為異常了。異常轉錯誤,例如panic觸發的異常被recover恢復後,將傳回值中error類型的變數進行賦值,以便上層函數
繼續走錯誤處理流程。
以上是golang怎麼截獲錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!