Go - Defer / Panic / Recover
Beginner 10/10
Teacher 10/10
Architect 10/10
Try it: Open a file and
defer
its Close()
; deliberately trigger an error and ensure the file is closed.defer
f, _ := os.Open("file")
defer f.Close()
panic/recover
func safe(){
defer func(){ if r := recover(); r != nil { fmt.Println("recovered", r) } }()
panic("boom")
}
Prefer explicit errors over panic except for programmer bugs (e.g., impossible states).
Common errors
- Using
panic
for expected errors—prefer returningerror
.
Practice
- Wrap a function with
recover
and log the panic safely.
Quick quiz
- When is
panic
appropriate?