1.确保调用在函数结束时发生
2.参数在defer语句是计算
示例1:
func tryDefer() {
for i :=0; i < 100; i++ {
defer fmt.Println(i)
if i == 30 {
panic("printed too many")
}
}
}
3.defer列表为后进先出
示例2:
func writeFile(fileName string) {
file, err := os.Create(fileName)
if err != nil {
panic(err)
}
defer file.Close()
writer := bufio.NewWriter(file)
defer writer.Flush()
f :=fib.Fibonacci()
for i := 0; i < 10; i++ {
fmt.Fprintln(writer, f())
}
}