package main
import (
"fmt"
"time"
)
func main() {
defer func() {
fmt.Println("main——不是panic的协程的defer")
}()
go func() {
defer func() {
fmt.Println("panic协程——defer——执行recover")
if err := recover(); err != nil{
fmt.Println("panic协程——recover协程拉起:",err)
}
}()
defer func() {
fmt.Println("panic协程——defer——什么都不做")
}()
a := 0
fmt.Println(23/a)
//panic("go die")
fmt.Println("panic协程——after go die, can i print")
//panic之后不回调用
defer func() {
fmt.Println("panic协程——defer——panic发生后面定义")
}()
}()
//没啥作用
if err := recover(); err != nil{
fmt.Println("main——非panic协程拉起")
}
fmt.Println("main——panic after(跑的比较快)")
time.Sleep(time.Second * 3)
fmt.Println("main——panic after time")
}
输出
main——panic after(跑的比较快)
panic协程——defer——什么都不做
panic协程——defer——执行recover
panic协程——recover协程拉起: runtime error: integer divide by zero
main——panic after time
main——不是panic的协程的defer