packagemainimport"fmt"funcmain() {f() fmt.Println("Returned normally from f.")}funcf() {deferfunc() {if r :=recover(); r !=nil { fmt.Println("Recovered in f", r) } }() fmt.Println("Calling g.")g(0) fmt.Println("Returned normally from g.")}funcg(i int) {if i >3 { fmt.Println("Panicking!")panic(fmt.Sprintf("%v", i)) }defer fmt.Println("Defer in g", i) fmt.Println("Printing in g", i)g(i +1)}
會印出如下
Calling g.
Printing in g 0
Printing in g 1
Printing in g 2
Printing in g 3
Panicking!
Defer in g 3
Defer in g 2
Defer in g 1
Defer in g 0
Recovered in f 4
Returned normally from f.