defer 语句

defer 语句将函数执行推迟到调用函数(包含函数)退出。 函数调用参数还是立马求值,只是执行推迟而已。

你可能已经猜到这个程序输出什么了:

/_src/tour/defer.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"


func main() {
    defer fmt.Println("world")

    fmt.Println("hello")
}

对,就是这么简单!

defer栈

与函数调用类似,推迟执行的函数调用也被推到一个 。 当函数返回时,这些被推迟执行的函数调用将被执行,以后进先出( last-in-first-out )的顺序。

/_src/tour/defer-multi.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import "fmt"


func main() {
    fmt.Println("counting")

    for i := 0; i < 10; i++ {
        defer fmt.Println(i)
    }

    fmt.Println("done")
}

下一步

下一节 我们一起来看看 Go 语言 指针

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../_images/wechat-mp-qrcode.png

小菜学编程

微信打赏