defer 语句

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

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

/_src/tour/defer.go

  1. package main
  2.  
  3. import "fmt"
  4.  
  5.  
  6. func main() {
  7. defer fmt.Println("world")
  8.  
  9. fmt.Println("hello")
  10. }

对,就是这么简单!

defer栈

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

/_src/tour/defer-multi.go

  1. package main
  2.  
  3. import "fmt"
  4.  
  5.  
  6. func main() {
  7. fmt.Println("counting")
  8.  
  9. for i := 0; i < 10; i++ {
  10. defer fmt.Println(i)
  11. }
  12.  
  13. fmt.Println("done")
  14. }

下一步

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

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

../_images/wechat-mp-qrcode.png小菜学编程

微信打赏