【Go】defer


  1. defer的执行顺序(执行到defer关键字时,将该行代码压栈,方法执行结束后,逐个弹栈并执行方法)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 1.defer的执行顺序
    func func1() {
    fmt.Println("func1 ...")
    }
    func func2() {
    fmt.Println("func2 ...")
    }
    func func3() {
    fmt.Println("func3 ...")
    }

    func main() {
    // 测试defer执行顺序
    defer func1()
    defer func2()
    defer func3()
    }

    结果

  2. defer和return谁先谁后

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 2. defer和return的先后顺序
    func deferFunc() {
    fmt.Println("deferFunc ...")
    }
    func returnFunc() int {
    fmt.Println("returnFunc ...")
    return 0
    }
    func testDeferAndReturn() int {
    defer deferFunc()
    return returnFunc()
    }

    func main() {
    // 测试defer和return的执行顺序
    testDeferAndReturn()
    }

    结果