package main import ( "fmt" "log" ) func de() { //recover() //可以打印panic的错误信息 //fmt.Println(recover()) if err := recover(); err != nil { //产生了panic异常 fmt.Println(err) } } func test() { defer de() log.Panic("aaaaaaaaaaaaaaaaaaaaa") log.Panic("bbbbbbbbbbbbbbbbbbbbb") } func main() { test() fmt.Println("-------------- main over -------------------------") }
2020/08/10 11:13:30 aaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaa -------------- main over -------------------------
注意 第二次panic没有被执行,第一次程序异常后,就转到了defer方法
recover方法必须放在defer方法中使用,并且只能捕获defer所在外层方法的第一个painc,然后跳出该外层方法,继续程序执行