defer

package main

import "fmt"

func main() {

	var whatever [5]struct{}

	fmt.Println(whatever)

	for i := range whatever {
		fmt.Println(i)
	}
}

/*
[{} {} {} {} {}]
0
1
2
3
4
*/

defer 碰上闭包

defer f.Close

多个 defer 注册,按 FILO 次序执行 ( 先进后出 )。

延迟调用参数在注册时求值或复制,可用指针或闭包 "延迟" 读取。

滥用 defer 可能会导致性能问题,尤其是在一个 "大循环" 里。

defer陷阱

defer 与 closure

defer 与 return

defer nil 函数

在错误的位置使用 defer

解决方案

不检查错误

改进一下

再改进一下

释放不同的资源

解决方案

Last updated