Go panic and recover
A panic stops normal flow, like a crash. recover, used inside a deferred function, catches it. Prefer returning errors; use panic only for truly unexpected states.
ExampleGo
package main
import "fmt"
func safeDivide(a, b int) (result int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("recovered: %v", r)
}
}()
return a / b, nil
}
func main() {
fmt.Println(safeDivide(10, 2))
fmt.Println(safeDivide(1, 0))
fmt.Println("program keeps running")
}Output
5 <nil> 0 recovered: runtime error: integer divide by zero program keeps running
Quick check
Where must recover be called to catch a panic?
Finish the quick check (and any code exercise) to complete this lesson, or mark it done yourself.
Tip: use the left and right arrow keys to move between lessons.