Question #134

Author: admin
tags: Go  
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")
}
In what order will the messages be displayed in the console?
main 1
main 5
foo 1
foo 2
main 4
main 3
main 2
main 1
foo 1
foo 2
main 4
main 3
main 2
main 1
main 5
foo 1
foo 3
foo 4
foo 2
main 4
main 3
main 2
main 1
foo 1
foo 3
foo 4
foo 2
main 3
main 2
main 1
foo 1
foo 4
foo 2
main 3
main 2
main 1
foo 1
foo 2
main 3
main 2
Rate the difficulty of the question:
easyhard