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相关的内容

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