这是我参与「第三届青训营 -后端场」笔记创作活动的的第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.当外围函数中的代码引发运行恐慌时,只有其中所有延迟函数都执行完毕后,该运行恐慌才会真正被扩展至