English 中文(简体)
Go语言defer
  • 时间:2023-06-01 15:30:58

Go语言defer

defer一般用于资源的释放和异常的捕捉, 作为Go语言的特性之一.


defer 语句会将其后面跟随的语句进行延迟处理. 意思就是说 跟在defer后面的语言 将会在程序进行最后的return之后再执行.


在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。


defer的用处举例

1,可以用于错误处理

一般语言常用 try…catch语法来处理错误异常,go可以用defer  ,在出现错误异常的时候defer 来记录异常


2,资源的释放

在程序最开始,os.Open及os.Create打开了两个文件资源描述符,并在最后通过file.Close方法得到释放,在正常情况下,该程序能正常运行,一旦在dstName文件创建过程中出现错误,程序就直接返回,src资源将得不到释放。因此需要在所有错误退出时释放资源,即修改为如下代码才能保证其在异常情况下的正确性。

多个defer语句的执行顺序

当有多个 defer 行为被注册时,它们会以逆序执行(类似栈,即后进先出), 相当于开辟了一个延时调用栈