Go語言的類型系統會在編譯時捕獲很多錯誤欺劳,但有些錯誤只能在運行時檢查,如數組訪問越界铅鲤、空指針引用等划提,這些運行時錯誤會引起宕機。
一般情況下邢享,系統宕機時鹏往,系統會停止執(zhí)行,并開始執(zhí)行延遲操作骇塘。
由于Go語言不支持try catch finally的操作伊履,可以用panic和recover來模擬相關操作
模擬時需要使用defer關鍵詞,充當finally的效果款违。(需要說明的是唐瀑,多個defer的執(zhí)行順序為倒序,既后出現的defer語句先執(zhí)行)
下面是模擬try catch的具體示例
import (
"fmt"
)
// 用panic 和 recover來模擬 try catch finally
func main() {
fmt.Println("start main")
defer recoverDefer()//必須通過defer延遲的方式來捕獲panic
? panic("test panic")//程序宕機 插爹,類似于throw exception
? fmt.Println("end main")//無法執(zhí)行
}
//有點類似于finally
func recoverDefer() {
fmt.Println("start recover")
if err :=recover(); err !=nil {
//do something
? ? ? fmt.Println(err)
}
fmt.Println("end recover")
}
運行結果:
start main
start recover
test panic
end recover