package main import "fmt" func m(aa int) string { a := fmt.Sprintf("AA: %v", aa) ff:=func() string { println(1) p:=recover() if p!=nil { a=fmt.Sprintf("Defer recover: %v", aa) } else { a=fmt.Sprintf("defer no recover: %v", aa) } return a } defer ff() if (aa==0) { panic("hello") } fmt.Printf("Q: %v\n", aa) return a } func main() { fmt.Printf("M %v\n", m(10)); fmt.Printf("M %v\n", m(0)); }