前端面试题库

Go的defer底层数据结构和一些特性

defer更新时间:2024-09-07 06:50:34

答案

每个 defer 语句都对应一个_defer 实例,多个实例使用指针连接起来形成一个单连表,保存在 gotoutine 数据结构中,每次插入_defer 实例,均插入到链表的头部,函数结束再一次从头部取出,从而形成后进先出的效果。

总结:

  1. 延迟函数的参数是 defer 语句出现的时候就已经确定了的。
  2. 延迟函数执行按照后进先出的顺序执行,即先出现的 defer 最后执行。
  3. 延迟函数可能操作主函数的返回值。
  4. 申请资源后应立即使用 defer 关闭资源。

评论