go-defer
顺序
defer被存储在栈结构中,注册defer函数对应入栈操作,执行defer函数对应出栈操作。
因此函数内的defer函数按照后入先出(LIFO)的顺序执行
用法
- 拦截panic,可以将程序从panic中recover回来
- 修改函数的命名返回值
- 输出调试信息
- 还原变量的旧值
注意
-
defer函数中变量的求值时机是入栈时
-
结合上一点,使用匿名函数+闭包,正确传递变量值到defer函数中
func foo2(){ for i:=0;i<=3;i++{ defer func(n){ fmt.Println(n) }(i) } }
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。