defer关键字|青训营笔记

116 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

defer

  • defer的词义: “延迟” “推迟”
  • 在go中,使用defer关键字来延迟一个函数或者方法的执行

defer的特点

  • 延迟执行
  • 参数预计算
  • 同一 goroutine 中多个 defer 的执行顺序依照 FILO 规则

defer 资源释放

代码通过 os.Open 打开一个文件,在执行一系列操作后,在最后通过 .Close 方法将资源释放,然而在执行一系列操作过程中,出现异常并退出程序后,文件资源将无法被释放。想要在程序退出前能够执行资源释放操作,使用 defer 能达到这种目的。在成功打开文件之后,无论后边程序是否能够正常运行 ,在退出前,都能够将文件资源释放。

defer在资源释放中用法:

A:    对象.close() ,临时文件的删除。。。
      文件.open()
      defer close()
      读或写

异常处理

程序可能存在 panic ,如除 0 运算、数组越界访问 、对空指针取值等,这些异常将导致程序退出。某些时候,我们期望捕获这些异常,并让程序正常执行。

  • go语言中关于异常的处理,使用 panic() 和 recover()
  • panic函数用于引发恐慌,导致程序中断执行
  • recover函数用于恢复程序的执行,recover()语法上要求必须在defer中运行

存在多个defer函数调用过程

  • 先延迟的后执行,后延迟的先执行(该特性联想进栈出栈,先进后出)

defer函数注意点

  • a.当外围函数中的语句正常执行完毕时,只有其中所有的延迟函数都执行完毕,外围函数才会真正的结束执行
  • b.当执行外围函数中的return语句时,只有其中所有的延迟函数都执行完毕后,外围函数才会真正返回
  • c.当外围函数中的代码引发运行恐慌时,只有其中所有延迟函数都执行完毕后,该运行恐慌才会真正被扩展至