defer 语句
defer
语句将函数执行推迟到调用函数(包含函数)退出。函数调用参数还是立马求值,只是执行推迟而已。
你可能已经猜到这个程序输出什么了:
- package main
- import "fmt"
- func main() {
- defer fmt.Println("world")
- fmt.Println("hello")
- }
对,就是这么简单!
defer栈
与函数调用类似,推迟执行的函数调用也被推到一个 栈 。当函数返回时,这些被推迟执行的函数调用将被执行,以后进先出( last-in-first-out
)的顺序。
- package main
- import "fmt"
- func main() {
- fmt.Println("counting")
- for i := 0; i < 10; i++ {
- defer fmt.Println(i)
- }
- fmt.Println("done")
- }
下一步
订阅更新,获取更多学习资料,请关注我们的 微信公众号 :