面试题 / 2 / 6 / 创建于 3年前
请在评论区写下你的答案。
defer 的执行顺序可以参考栈的特性,先进后出,定义defer就相当于进栈,退出时就相当于defer的出栈并执行。通俗讲就是按运行时的顺序,先定义后执行。
先进后出
defer 底层是使用栈的,所以会先进后出
defer 的执行顺序是先进后出,defer 在被压栈时,会把当前环境下的变量一起带到栈中。如:func main() {
var arg = 1 defer fmt.Println(arg) arg = 2 defer fmt.Println(arg)
}
一个函数中的多条 defer 语句,执行顺序与声明顺序相反。
defer
return
value
goroutine
我要举报该,理由是:
defer 的执行顺序可以参考栈的特性,先进后出,定义defer就相当于进栈,退出时就相当于defer的出栈并执行。
通俗讲就是按运行时的顺序,先定义后执行。
先进后出
defer 底层是使用栈的,所以会先进后出
defer 的执行顺序是先进后出,defer 在被压栈时,会把当前环境下的变量一起带到栈中。如:
func main() {
}
一个函数中的多条 defer 语句,执行顺序与声明顺序相反。
defer
不会影响return
的返回值value
进行赋值defer
,如果defer
中有对 返回值value
有操作,则会影响到返回值return
返回最终的 返回值value
goroutine
数据结构