总结
recover只能获取同协程内的panic
defer 获取recover 只能在直接func 内获取,不能再跨一个func
主协程之外的子协程不会捕获会发生panic
package main
import (
"fmt"
"time"
)
func main() {
defer func() {
if e := recover(); e != nil {
fmt.Println(e)
}
}()
go test()
time.Sleep(time.Second)
}
func test() {
panic("我错了")
}
主协程之外的子协程 需要在子协程之内捕获
package main
import (
"fmt"
"time"
)
//没有报错
func main() {
defer func() {
if e := recover(); e != nil {
fmt.Println(e)
}
}()
go test11()
time.Sleep(time.Second)
}
func test11() {
defer func() {
if e := recover(); e != nil {
fmt.Println(e)
}
}()
panic("我错了")
}