美文网首页go学习程序员Golang语言社区
15. defer语句延迟函数的执行

15. defer语句延迟函数的执行

作者: 厚土火焱 | 来源:发表于2017-08-12 23:04 被阅读105次

    当函数中有defer语句,会延迟此语句的执行,直到函数返回后才执行。

    defer fmt.Println("")
    

    defer后面的是参数
    延迟调用的参数是立刻生成的,但是在上层函数返回前都不会去执行。
    看例子,并运行看结果

    package main
    
    import "fmt"
    
    func main() {
        defer fmt.Print("Hello")
        fmt.Print("World")
    }
    

    你认为执行结果是什么呢?肯定不是HelloWorld,而是

    WorldHello
    

    延迟的函数调用是被压入一个栈中。当函数返回时,会按照后进先出的原则,调出被延迟的函数调用。请看下面例子中,i的打印顺序。

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        fmt.Println("Begin...")
        for i := 0; i < 10; i++{
            defer fmt.Println(i)
        }
        fmt.Println("Done")
    }
    

    运行结果

    Begin...
    Done
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    

    看明白了么?
    整个函数的输出已经运行完了,打印了 Done ,然后才开始打印 for 循环的 defer,并且是后进先出的方式,是从 i = 9 开始打印的。

    相关文章

      网友评论

        本文标题:15. defer语句延迟函数的执行

        本文链接:https://www.haomeiwen.com/subject/ehfsrxtx.html