题目序号:(5362)
题目来源:七牛
频次:1
答案1:(自由)
在同一个函数中,defer 函数调用的执行顺序与它们分别所属的 defer 语句的出现顺序完全相反。当一个函数即将结束执行时,写在最下面的 defer 函数调用会最先执行,其次是写在他上边,与它的距离最近的那个 defer 函数调用,以此类推,最上面的 defer 函数调用会最后一个执行。
需要注意一下 for 循环中的 defer 执行顺序。如果函数中有一条 for 循环语句,并且这个 for 循环语句中包含了一条 defer 语句,那么 defer 语句的执行是怎样的?弄清楚这个问题需要弄明白 defer 语句执行时发生的事情。在 defer 语句每次执行的时候,go 语言会把它携带的 defer 函数及其参数值存储到一个链表中,这个链表叫做 goroutine_defer。这个链表与 defer 语句所属的函数是对应的,它是先进先出的,相当于一个栈。在执行某个函数中的 defer 函数调用的时候,go 语言会先拿到对应的链表,然后从链表中一个一个取出 defer 函数及其参数值,逐个调用,这也就是为什么说 “defer 函数调用的执行顺序与它们分别所属的 defer 语句的出现顺序完全相反”。
本文来自投稿,不代表本站立场,如若转载,请注明出处: