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