// Created on savesnippets.com ยท https://savesnippets.com/0yMz3K3DV89UyJ package main import ( "fmt" "os" ) func processFile(path string) error { f, err := os.Open(path) if err != nil { return err } defer f.Close() // runs on every return path // ... use f ... return nil } func safeDivide(a, b int) (result int, err error) { defer func() { if r := recover(); r != nil { err = fmt.Errorf("recovered from panic: %v", r) } }() return a / b, nil // panics if b == 0 } func main() { r, err := safeDivide(10, 0) fmt.Printf("result=%d err=%v\n", r, err) // result=0 err=recovered from panic: runtime error: integer divide by zero // defers run in LIFO order defer fmt.Println("third") defer fmt.Println("second") defer fmt.Println("first") }