Reputation: 10453
I was using a library which recover()
s from panics, and it was using code that simplifies to the following:
func main() {
defer rec()
panic("X")
}
func rec() {
rec2()
}
func rec2() {
fmt.Printf("recovered: %v\n", recover())
}
The output of this is:
recovered: <nil>
panic: X
... more panic output ...
Notably, recover()
returns nil
instead of the error. Is this intended behavior?
Upvotes: 2
Views: 76
Reputation: 109405
recover
must be called directly by a deferred function.
from the language spec:
The return value of recover is nil if any of the following conditions holds:
- panic's argument was nil;
- the goroutine is not panicking;
- recover was not called directly by a deferred function.
Upvotes: 3