golang入門day4(panic 和 recover)

error

go 不存在 try catch 機制 , go語言引入 error 接口類型 作爲錯誤的標準處理模式, 因此 error 在 go語言中也是一種數據類型。類似於 int float

error 類型變量的定義:
方式一: err1 := errors.New(“自己創建着玩”)
方式二: err2 :=fmt.Errorf(“錯誤的信息碼:%d”, 100)

panic 和 recover

golang中引入兩個內置函數 Panic 和 recover 來觸發和終止異常處理流程, 同時引入關鍵字defer 來延遲執行defer 後邊的函數。
一直等到外圍函數即將 執行完畢時,延遲函數(defer 後邊的函數纔開始執行);

當程序運行時, 如果遇到引用空指針,下標越界或者顯示調用Panic 函數等情況, 那麼會先觸發Panic 函數的執行, 然後執行defer 延遲函數, 調用者繼續傳遞Panic , 因此** 該過程一直在調用棧中重複發生:** 1 函數停止執行, 2 調用延遲函數等情況。

如果 在延遲函數中 一直沒有recover函數的調用,則會到達該協程的終點, 該協程結束—> 然後終止其他所有協程。包括主協程(類似主線程, 主協程協程 ID爲1)

panic

1 內建函數
2 假如函數F 中書寫了panic 語句, 就會終止panic後要執行的代碼,之前遇到的defer 語句被執行的。
3 返回函數的調用者G, 在G中 ,調用函數F語句之後的代碼不會執行,已存在的defer語句將按照逆序執行
4 直到goroutine 整個退出,並報告錯誤

recover

1 內建函數
2 用來控制一個goroutine 的panicking行爲,捕獲panic,從而影響應用的行爲。
3 一般的調用建議:
a : 在defer 函數中, 通過recover 來終止一個goroutine的panicking過程, 從而恢復正常代碼的執行
b : 可以獲取通過panic傳遞的error

簡單來講: go語言中 通過 panic拋出一個異常, 然後在defer 中通過recover 來捕獲這個異常,然後正常處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章