Go錯誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法
前言
前面我們講過了error類型來處理一般的錯誤,本文會描述使用panic函數(shù)和recover函數(shù)來處理比較極端的錯誤。簡單來說,當程序運行時遇到無法處理的錯誤或異常情況時,會調用panic函數(shù)引發(fā)一個運行時錯誤,此時程序會終止執(zhí)行并拋出錯誤信息。為了避免程序崩潰,可以使用recover函數(shù)來捕獲錯誤,并進行處理或恢復程序的執(zhí)行,通常recover函數(shù)寫在defer語句中。
panic函數(shù)
panic函數(shù)是內置的一個函數(shù),他的結構如下:
func panic(v interface{})
此函數(shù)接受一個接口類型的值,這個值通常是錯誤的描述,調用次函數(shù)后,會引發(fā)異常,這將中止當前的程序流程,并在堆棧中記錄當前的異常信息。此函數(shù)可以被主動調用,也可以在發(fā)生數(shù)組越界、空指針引用等情況下被動調用。
我們將上篇文章的除法例子進行小小的修改,使用panic進行錯誤處理:
package main
import (
"fmt"
)
func divide(a, b int) int{
if b == 0 {
panic("division by zero")
}
return a / b
}
func main() {
result := divide(10, 0)
fmt.Println("the result is ",result)
}運行后,程序直接退出了,報division by zero錯誤。
recover函數(shù)
有些時候,我們不希望panic函數(shù)直接粗暴的退出,這時候我們可以使用recover函數(shù)對pannic進行捕獲,注意,recover函數(shù)只能寫在defer關鍵字之后哦!
recover也是內置函數(shù),他的結構如下:
func recover() interface{}他能捕獲到的panic函數(shù)報出的錯誤,并使用接口類型進行返回。
我們使用recover對例子再次修改,讓程序可以繼續(xù)的運行,而不是粗暴的退出,代碼如下:
package main
import (
"fmt"
)
func divide(a, b int) int{
defer func() {
if err:=recover();err!=nil {
fmt.Printf("runtime panic : %v\n", err)
}
}()
if b == 0 {
panic("division by zero")
}
return a / b
}
func main() {
result := divide(10, 0)
fmt.Println("the result is ",result)
}總結
本篇博客探討了如何使用 panic 和 recover 來處理 Go 語言中的異常。當程序遇到無法處理的錯誤時,它可以使用 panic 函數(shù)引發(fā)異常,并使用 recover 函數(shù)結合defer關鍵詞從異常中恢復。
到此這篇關于Go錯誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法的文章就介紹到這了,更多相關go異常捕獲panic 和 recover內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang?基于?mysql?簡單實現(xiàn)分布式讀寫鎖
這篇文章主要介紹了golang?基于mysql簡單實現(xiàn)分布式讀寫鎖,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Go語言中break label與goto label的區(qū)別
這篇文章主要介紹了Go語言中break label與goto label的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

