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 阅读(37) 评论(0) 编辑 收藏 举报