defer 与 panic 问题
package main
func f1() {
defer println("f1-begin")
f2()
defer println("f1-end")
}
func f2() {
defer println("f2-begin")
f3()
defer println("f2-end")
}
func f3() {
defer println("f3-begin")
panic(0)
defer println("f3-end")
}
func main() {
f1()
}
最后 f3 中 panic,所以 defer 不再增加,defer 栈是:f11 f21 f31 panic
第二个问题
package main
import "log"
func f() {
defer func() {
if r := recover(); r != nil {
log.Printf("recover:%#v", r)
}
}()
panic(1)
panic(2)
}
func main() {
f()
}
两个 panic 的时候 recover,结果是什么:
panic 之后,要么直接退出函数,要么 recover 一下退出函数,不会再执行别的代码