henryspace

记录精彩的程序人生 开始使用

Part 19 - Go 语言学习 - 资源释放 defer 调用

资源释放defer调用

  1. defer 确保资源销毁时执行,是个栈操作,先入后出
package main

import "fmt"

func tryDefer() {

	// defer 确保调用在函数结束时发生,是个栈操作,先入后出
	defer fmt.Println(1)
	defer fmt.Println(2)
	fmt.Println(3)
}

func main() {
	tryDefer()
}
// 输出
3
2
1

  1. 参数在defer语句时计算
  2. defer列表为先进后出
    // i的值此时不会打印30行30,而是30->0顺序会倒序打印
	for i :=0; i < 100; i++ {
		defer fmt.Println(i)
		if i == 30 {
			 panic("too many")
		}
	}
  1. 何时使用defer调用, 有成对使用的调用时
  • Open/Close
  • Lock/Unlock
  • PrintHeader/PrintFooter
评论
留下你的脚步
推荐阅读