Go学习笔记:关于defer
有几个要点: 1、defer主要作用是用来做所谓的“善后”工作的,比如关闭文件、关闭网络连接、释放锁等等。有很多文章把defer放在异常处理中介绍,可能原因之一defer的出现极大改变了try-catch这种异常处理模式的复杂度(特别是嵌套的情况),代码变得更简洁了; 2、在一个Go函数中,允许有多个被defer的操作。这些操作按后进先出的方式,在函数return之前执行; 3、执行的顺序和时机:在一个函数中,无论有多少defer操作,无论它们的位置在哪儿,都会其它代码执行完毕,函数要return之前统一执行。如果将Go看成解释性语言的话,那么解释器会在遇到一个defer时将其后面的操作压入一个类似于堆栈的 数据结构中,并不马上执行。在遇到return时,再将堆栈中的所有defer操作来一遍“pop、执行、pop、执行......“,最后再return。
下面一段代码展示了执行顺序:
package main
执行的结果是: -1 -1 -2 -2 1000 100 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |