go recover让崩溃的程序继续执行

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,然后跳出该外层方法,继续程序执行

原文地址:https://www.cnblogs.com/perfei/p/13468662.html