package main import "fmt" func main() { // foo1() // foo2() foo3() } func getSomeVars() string { fmt.Println("getSomeVars execution") return "getSomeVars result" } func foo1() { defer fmt.Println("After work") defer fmt.Println(getSomeVars()) fmt.Println("Some useful work") } func foo2() { defer fmt.Println("After work") defer func() { fmt.Println(getSomeVars()) }() fmt.Println("Some useful work") } // Паника func deferTest() { defer func() { if err := recover(); err != nil { fmt.Println("panic happend:", err) } }() fmt.Println("Some useful work") panic("something bad happend") return } func foo3() { deferTest() return }