WeCodeAcademy

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.