1. package main
    2. import "fmt"
    3. func func1() {
    4. fmt.Println("A")
    5. }
    6. func func2() {
    7. fmt.Println("B")
    8. }
    9. func func3() {
    10. fmt.Println("C")
    11. }
    12. func main() {
    13. defer func1()
    14. defer func2()
    15. defer func3()
    16. }
    17. //输出:
    18. //C
    19. //B
    20. //A

    defer 和return的执行顺序
    如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。

    1. package main
    2. import "fmt"
    3. func deferFunc() int {
    4. fmt.Println("defer func called....")
    5. return 0
    6. }
    7. func returnFunc() int {
    8. fmt.Println("return func called....")
    9. return 0
    10. }
    11. func returnAndDefer() int {
    12. defer deferFunc()
    13. returnFunc()
    14. return 0
    15. }
    16. func main() {
    17. returnAndDefer()
    18. }
    19. //输出:
    20. //return func called....
    21. //defer func called....