package main
import "fmt"
func main() {
defer func() {
fmt.Print(recover())
}()
defer func() {
defer fmt.Print(recover())
defer panic(1)
recover()
}()
defer recover()
panic(2)
}
Choices:
Answer: 21
Run it on Go play.
Key points:
recover
calls at line 14 and 12 are no-op.
recover
calls at line 10 catches the panic 2
.
recover
calls at line 7 catches the panic 1
.
Please read Explain Panic/Recover Mechanism in Detail for details.