[TOC] # recover 崩溃了恢复 ~~~ func testa() { fmt.Println("aaaa") } func testb() { defer func() { //可以打印错误信息 //recover() //fmt.Println(recover()) //没有错就不要打印 if err := recover(); err != nil { //产生了panic异常 fmt.Println(err) } }() //显示调用panic函数 panic("this is a panic test") fmt.Println("bbbb") } func testc() { fmt.Println("cccc") } func main() { testa() //不会打印 testb() testc() } ~~~ # 控制链 ![](https://box.kancloud.cn/5cc22ecdefdc807d8677e4a45569fe9a_1362x1640.png) ~~~ func main() { fmt.Println("Enter function main.") panic(errors.New("something wrong")) p := recover() fmt.Printf("panic: %s\n", p) fmt.Println("Exit function main.") } ~~~ 这个不可以 需要defer结合使用 **defer定义在恐慌前面是可以的** ~~~ func main() { fmt.Println("Enter function main.") defer func() { //可以打印错误信息 //recover() //fmt.Println(recover()) //没有错就不要打印 if err := recover(); err != nil { //产生了panic异常 fmt.Println(err) } }() panic(errors.New("something wrong")) fmt.Println("程序退出了") } ~~~