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)
}