panic,recover 爆出异常,和捕获
package main
import (
"fmt"
"time"
)
func main() {
f()
fmt.Println("main end")
}
/*
1.多个defer 执行,最先定义的在栈底,最后定义的在栈顶,所有最后定义的最先执行
2.定义的defer里面的panic ,可以被它之前定义的recover捕获
3.recover 定义在defer func(){}() 函数中会被执行
*/
func f() {
defer func() {
fmt.Println("defer2 start")
if err := recover(); err != nil {
fmt.Println(err)
}
fmt.Println("defer2 end")
}()
defer func() {
fmt.Println("defer1 start")
if err := recover(); err != nil {
panic(err)
}
fmt.Println("defer1 end")
}()
for {
fmt.Println("func begin")
a := []string{"c", "c"}
fmt.Println(a[3])
fmt.Println("func end")
time.Sleep(1 * time.Second)
}
}
posted on 2022-09-21 15:20 running-fly 阅读(51) 评论(0) 收藏 举报
浙公网安备 33010602011771号