recover捕获panic
总结:当前函数或者协程错误退出,不影响其它函数或者协程继续运行
函数:
func main() {
fmt.Println("a")
run()
fmt.Println("b")
}
func run(){
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕获到的错误:%s\n", r)
}
}()
panic("错误")
}
输出:
a
捕获到的错误:错误
b
协程:
func main() {
requests := []int{12, 2, 3, 41, 5, 6, 1, 12, 3, 4, 2, 31}
for n := range requests {
go run(n) //开启多个协程
}
for {
select {}
}
}
func run(num int) {
defer func() {
if err := recover();err != nil {
fmt.Printf("%s\n", err)
}
}()
//模拟请求错误
if num%5 == 0 {
panic("请求出错")
}
fmt.Printf("%d\n", num)
}