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")
}
Create a free account and build your private vault. Share publicly whenever you want.