讲讲 Go 的 defer 底层数据结构和一些特性?
下面我们来看一下 Go 的 defer 底层数据结构和一些特性:
1. defer 函数会被压入一个栈中,等待周围函数返回时依次弹出并执行。这个栈是一个 LIFO(后进先出)结构。
2. defer 语句不会影响函数的返回结果和返回时间,它只会延迟函数的执行。
3. 每个函数都有自己的 defer 栈,它们独立运作,互不干扰。
4. defer 的执行顺序是倒序的,也就是说,最后一个 defer 语句会最先执行,最先一个 defer 语句会最后执行。
5. 由于 defer 使用栈结构,因此可以在函数中多次使用 defer 语句。在这种情况下,defer 语句会按照倒序依次执行。
6. 当函数发生 panic 时,Go 会立即执行该函数中所有的 defer 语句。这是一个非常有用的特性,允许程序员在出现异常时执行一些清理操作。
总之,defer 是 Go 中一个非常有用的特性,允许程序员优雅地处理资源释放、日志记录等任务,减少代码的重复和失误,提高代码的可读性和可维护性。
-
上一篇
讲讲 Go 的 defer 底层数据结构和一些特性?
<p class="ql-align-justify"><span style="color: rgb(18, 18, 18);">每个 defer 语句都对应一个_defer 实例,多个实例使用指针连接起来形成一个单连表,保存在 gotoutine 数据结构中,每次插入_defer 实例,均插入到链表的头部,函数结束再一次从头部取出,从而形成后进先出的效果。</span></p><p class="ql-align-justify"><br></p><p class="ql-align-justify"><strong style="color: rgb(18, 18, 18);">defer 的规则总结</strong><span style="color: rgb(18, 18, 18);">:</span></p><p class="ql-align-justify"><span style="color: rgb(18, 18, 18);">延迟函数的参数是 defer 语句出现的时候就已经确定了的。</span></p><p class="ql-align-justify"><span style="color: rgb(18, 18, 18);">延迟函数执行按照后进先出的顺序执行,即先出现的 defer 最后执行。</span></p><p class="ql-align-justify"><span style="color: rgb(18, 18, 18);">延迟函数可能操作主函数的返回值。</span></p><p class="ql-align-justify"><span style="color: rgb(18, 18, 18);">申请资源后立即使用 defer 关闭资源是个好习惯。</span></p><p><br></p>
-
下一篇
讲讲 Go 的 defer 底层数据结构和一些特性?
讲讲 Go 的 defer 底层数据结构和一些特性?
相关文章
- 请解释下PHP中会话(session)和Cookie(cookie)的作用。
- 请解释什么是defer语句,以及它有什么作用?
- 请解释一下PHP中的MVC模式是如何工作的?
- 请列出与PHP相关的缓存机制及其优缺点。
- 请解释HTTP的基本概念,以及在Golang中如何使用HTTP?
- 请举例说明PHP中如何处理异常?
- 请给一个例子解释一下PHP中的闭包函数是什么?
- 在PHP中,Magic Method都有哪些,并举例说明它们的作用?
- PHP中如何进行单元测试以及如何在开发过程中保证代码质量?
- PHP中如何处理文件上传和下载?
- 如何在Golang中进行并发编程?
- 请问PHP中如何实现多线程?
- 请提供至少三个通过PHP实现的网站性能优化技巧。
- PHP中常用的设计模式有哪些?
- 如何通过PHP来保护您的代码免受SQL注入攻击?
- 请谈谈您对PHP的垃圾回收机制的了解及实践。
- PHP7和PHP5的性能上有什么差别?
- 聊一下高并发和高性能的区别和联系?
- 如何在Golang中实现单例模式?
- 请描述在Golang中使用MongoDB时的最佳实践。
微信收款码
支付宝收款码