golang panic,defer,recover

参考:https://studygolang.com/articles/4108

 

defer可以单独处理err

panic与recover和defer一起使用

 

package main

import "fmt"

func main() {
    defer func() { // 必须要先声明defer,否则不能捕获到panic异常
        fmt.Println("c")
        if err := recover(); err != nil {
            fmt.Println(err) // 这里的err其实就是panic传入的内容,55
        }
        fmt.Println("d")
    }()
    f()
}

func f() {
    fmt.Println("a")
    panic(55)
    fmt.Println("b")     //不运行
    fmt.Println("f")  //不运行
}
结果:

a
c
55
d

 

原理:

  1.首先定义defer,注意defer是执行某个函数 defer func(){} ()

    recover定义在defer中

  2.在另外的函数中必须用panic(err) -----这个err可以是任意的值,如panic(333) panic(err) panic("dffd")

  3.在defer函数中会捕获这个err,这个err就是panic中的err

posted @ 2018-03-14 15:19  jay-  阅读(145)  评论(0编辑  收藏  举报