7 go中的異常處理

go中的異常處理有三個關鍵字

defer panic recover

defer是用來解決異常發生之後有關資源的釋放問題,拋出異常之後仍然會執行defer所作用的函數,可以用原來釋放資源。

panic是用來拋出異常然後如果沒有捕獲異常的處理,就會導致程序終止。

應該養成比較好的習慣,就是每一個資源打開之後就使用defer關閉資源

import(
  ”fmt“
)

func main {
    defer func() {
        fmt.Println("After defer")
    }()
    
    file.Open(filepath)
    defer file.Close() //習慣比較好
    
    panic("terminate this programma")
    
    fmt.Println("bye bye")
}

如果F的defer中無recover捕獲,則將panic拋到G中,G函數會立刻終止,不會執行G函數內後面的內容,但不會立刻return,而調用G的defer...以此類推。F中出現panic時,F函數會立刻終止,不會執行F函數內panic後面的內容,但不會立刻return,而是調用F的defer,如果F的defer中有recover捕獲,則F在執行完defer後正常返回,調用函數F的函數G繼續正常執行。先設置

func G() {
    defer func() {
        fmt.Println("c")
    }()
    F()
    fmt.Println("繼續執行")
}

func F() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("捕獲異常:", err)
        }
        fmt.Println("b")
    }()
    panic("a")
}

結果

捕獲異常: a
b
繼續執行
c

記住一定要在panic之後寫上recover纔可以捕捉相關的異常,所以其實可以再defer裏面包含關於recover相關的內容

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