package main
func main() {
defer func() {
println(recover().(int))
}()
defer func() {
defer func() {
recover()
}()
defer recover()
panic(3)
}()
defer func() {
defer func() {
defer func() {
recover()
}()
}()
defer recover()
panic(2)
}()
panic(1)
}
Choices:
Answer: 2
Run it on Go play.
Key points:
recover
calls at line 9 and 5, the other ones are all no-op.
recover
calls at line 9 recovers the panic 3
.
recover
calls at line 5 recovers the panic 2
.
1
is never recovered, but it is suppressed by the panic 2
.
Please read Explain Panic/Recover Mechanism in Detail for details.