【一 Go 到底】第二十一天 ---defer
一、defer 简介
1.1 为什么需要 defer
在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时的释放资源,Go 的设计者提供 defer (延时机制)。
1.2 快速入门案例
复制代码
二、defer 细节说明
2.1 细节说明
当 go 执行到一个 defer 时,不会立即执行 defer 后的语句,而是将 defer 后的语句压入到一个栈中(defer 栈),然后继续执行函数下一一个语句。
当函数执行完毕后,再从 defer 栈中,依次从
栈顶
取出语句执行(注:遵守栈先入后出
的机制)在 defer 将语句放入到栈时,也会将相关的值拷贝同时入栈,请看
案例1
2.2 案例演示
2.2.1 案例 1
复制代码
2.3 最佳实践
defer 最主要的价值是 当函数执行完毕后,可以及时的释放函数创建的资源
2.3.1 案例 2(模拟代码)
对文件进行操作,操作完成后关闭
复制代码
对数据库进行模拟操作
复制代码
在 golang 中通常做法是,创建资源后,例(打开文件,获取数据库链接,获取锁资源)。可以执行 defer file.close() / defer connect.close()
在 defer 后,可以继续使用创建资源
当函数完毕后,系统会依次从 defer 栈中,取出语句,关闭资源
这种机制很简洁,程序员无需考虑关闭资源的时机
版权声明: 本文为 InfoQ 作者【指剑】的原创文章。
原文链接:【http://xie.infoq.cn/article/5cbf9da4364a1c3df01b7a32f】。文章转载请联系作者。
评论