defer语句
-
说明
defer的词义:“延迟”,“推迟”
在go语言中,使用defer关键词来延迟一个函数或方法的执行
-
defer函数或方法:一个函数或方法被延迟执行了,需要等到所有函数或方法中的所有代码执行完后才会执行defer修饰的函数或方法。
-
defer的用法
-
对象.close() 如数据库连接的关闭,文件的删除等
-
关于异常的处理,使用panic()和recover()
panic函数用于引发恐慌,导致程序中断执行
recover函数用于恢复程序的执行,recover函数语法上要求必须在defer中执行
-
如果多个defer函数:先延迟后执行,后延迟先执行
-
defer函数传递参数的时候:defer函数调用时,就已经传递数据了参数数据了,只是暂时不执行函数中的代码而已。也就是defer函数实际执行时使用的参数是,代码执行到defer行时传入的参数值
-
-
堆栈的延迟
当一个函数有多个延迟调用时,他们被添加到一个堆栈中,并在后进先出的顺序中执行。
-
defer注意点
- 当外围函数中的语句正常执行完毕时,只有其中所有的延迟函数执行完毕,外围函数才会真正的结束执行。
- 当执行外围函数中的return语句时,只有其中所有的延迟函数都执行完毕后,外围函数才会真正返回
- 当外围函数中的代码引发运行恐慌时,只有其中所有的延迟函数执行完毕后,该运行时才会真正扩散至调用函数