Important Go Topics
Go defer, panic and recover
Run cleanup code when a function returns, and turn a panic back into an ordinary error.
What you'll learn
- defer
- Deferred calls run in reverse
- recover
readConfig()
- 1
open fileruns first - 2
defer closescheduled - 3
read settingsruns second - 4
close fileruns on return
Cleanup that always runs
defer schedules a call to run when the surrounding function returns, which makes it the usual way to close files and release locks. A panic stops the normal flow, and recover, called in a deferred function, catches it.
close file prints after read settings because the deferred call runs when readConfig returns. Dividing by zero panics; the deferred function recovers and stores an error in the named result err. The three deferred calls in main run last, in reverse order.
Key points
- A deferred call runs when the function returns.
- Several defers run last in, first out.
- recover catches a panic inside a deferred function.
Runnable Go example
main.go
package main
import "fmt"
func readConfig() {
fmt.Println("open file")
defer fmt.Println("close file") // runs when the function returns
fmt.Println("read settings")
}
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() {
readConfig()
for i := 1; i <= 3; i++ {
defer fmt.Println("deferred", i) // last in, first out
}
fmt.Println(safeDivide(10, 2))
fmt.Println(safeDivide(1, 0))
}
open file
read settings
close file
5 <nil>
0 recovered: runtime error: integer divide by zero
deferred 3
deferred 2
deferred 1Practice
Open the example in the online compiler, change a value or add a line, and predict the output before you run it. Then break the code on purpose and read the compiler's message.
Finished this lesson?
Mark it as learned to track your progress.
Your progress is saved in this browser Sign in to keep it on every device.
Practice with a challenge
Use what this lesson covers to solve a real problem. Each challenge runs in your browser with instant tests and an AI review.
All challenges