package main import "fmt" func main() { fmt.Println("main 1") // #1 defer fmt.Println("main 2") defer func() { if r := recover(); r != nil { fmt.Println("main 3") } }() foo() defer fmt.Println("main 4") defer fmt.Println("main 5") } func foo() { fmt.Println("foo 1") defer fmt.Println("foo 2") num := 1 if num == 1 { panic("Houston, we have a problem") } fmt.Println("foo 3") defer fmt.Println("foo 4") }