这似乎是连贯的(另请参阅“ 延迟,恐慌和恢复 ”)
周围函数返回 后, 将按照 后进 先出的顺序执行延迟的函数调用。
该函数打印“ 3210”:
func b() { for i := 0; i < 4; i++ { defer fmt.Print(i) }}defer评估时的最后一次调用意味着
i=3,最后一个意味着最后一个
i=2,依此类推。
Golang规格:
每次
defer执行“ ”语句时,都会照常评估调用的函数值和参数并重新保存,但实际的函数体不会执行。
在
defers将被称为FUNC结束时
是的,但是在循环运行时会先评估它们的参数。
当与闭包(函数文字)一起使用时,“
如何golang的“延迟”捕获闭包的参数?”中有一个比较棘手的defer案例,如“为什么在Golang中闭包主体后面添加“”中所详细说明”。
()



