go 学习笔记之咬文嚼字带你弄清楚什么是 defer延迟函数

https://mp.weixin.qq.com/s/t5tmqsjZ4y4Z_n6u4c9bMw

通过本文,我们知道了延迟函数的执行时机以及一些细节,关键是理解 Each time a "defer" statement executes, the function value and parameters to the call are evaluated as usual and saved anew but the actual function is not invoked. 这句话,绝对是重中之重!

简而言之,延迟函数在声明时会收集相关参数赋值拷贝一份入栈,时机合适时再从入栈环境中寻找相关环境参数,如果找不到就扩大范围寻找外层函数是否包含所需变量,执行过程也就是延迟函数的出栈.

有一个消防员专门负责保卫商场的安全,每天商场进进出出很多人流,总有一些重要人物也会来到商场购物,突然有一天,发生了火灾,正在大家惊慌失措中...

这个消防员到底干了什么才能保证重要人物安全的同时也能让他们不遭受财产损失?

https://tva1.sinaimg.cn/large/006y8mN6ly1g93hp4mohcj30aa08wq30.jpg
go-error-defer-panic.png

请补充你的答案,感谢你的阅读与关注,下一节再见~

阅读延伸以及参考文档

  • Defer_statements[3]
  • Built-in_functions[4]
  • Go 语言规格说明书 之 内建函数(Built-in functions)[5]
  • go 语言快速入门:内建函数(6)[6]
  • 你知道 defer 的坑吗?[7]
  • golang 语言 defer 特性详解.md[8]
  • Golang 之轻松化解 defer 的温柔陷阱[9]

参考资料

[1]

go 学习笔记之解读什么是defer延迟函数: https://mp.weixin.qq.com/s/XttOuCEk7kgySKLOCqVMRQ

[2]

defer关键字: https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html

[3]

Defer_statements: https://golang.google.cn/ref/spec#Defer_statements

[4]

Built-in_functions: https://golang.google.cn/ref/spec#Built-in_functions

[5]

Go语言规格说明书 之 内建函数(Built-in functions): https://www.cnblogs.com/luo630/p/9669966.html

[6]

go语言快速入门:内建函数(6): https://blog.csdn.net/liumiaocn/article/details/54804074

[7]

你知道defer的坑吗?: https://www.jianshu.com/p/9a7364762714

[8]

golang语言defer特性详解.md: https://www.jianshu.com/p/57acdbc8b30a

[9]

Golang之轻松化解defer的温柔陷阱: https://segmentfault.com/a/1190000018169295

0 个评论

要回复文章请先登录注册