Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
package main import ( "fmt" "os" ) // safeDiv recovers from a panic and returns an error instead. func safeDiv(a, b int) (result int, err error) { defer func() { if r := recover(); r != nil { err = fmt.Errorf("recovered from panic: %v", r) } }() result = a / b // panics if b == 0 return } // openFile shows defer for cleanup func openFile(name string) error { f, err := os.Open(name) if err != nil { return err } defer f.Close() // guaranteed to run // ... process file ... fmt.Println("opened:", f.Name()) return nil } // deferOrder shows LIFO execution func deferOrder() { for i := 0; i < 3; i++ { defer fmt.Printf("deferred %d ", i) } fmt.Println("after loop") } func main() { res, err := safeDiv(10, 2) fmt.Println("10/2 =", res, err) res, err = safeDiv(10, 0) fmt.Println("10/0 =", res, err) _ = openFile("nonexistent.txt") deferOrder() // prints: after loop, deferred 2, deferred 1, deferred 0 }
Result
Open