多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] >[success] ## **8:函数defer** >[success] ### **8.1:基本介绍** 在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer (延时机制) >[success] ### **8.2:案例演示** ![](https://img.kancloud.cn/06/21/062170d5a088ad13336708c6c39cf415_1062x720.png) >[success] ### **8.3:defer细节** 1)当go执行到一个defer时, 不会立即执行defer后的语句,而是将defer后的语句压入到一个栈中【我为了方便,暂时称该栈为defer栈】然后继续执行函数下一个语句 2)当函数执行完毕后,在从defer栈中,依次从栈顶取出语句执行(注:遵守栈先入后出的机制),所以同学们看到前面案例输出的顺序。 3)在defer 将语句放入到栈时,也会将相关的值拷贝同时入栈。请看一段代码: 4)在golang编程中的通常做法是,创建资源后,比如(打开了文件,获取了数据库的链接,或者是锁资源),可以执行 defer file.Close() defer connect .CloseO 5)在defer后,可以继续使用创建资源 6)当函数完毕后,系统会依次从defer栈中,取出语句,关闭资源三造, 7)这种机制,非常简洁,程序员不用再为在什么时机关闭资源而烦心。