Go语言的defer语句工作方式如下:
一、定义
defer语句会将函数调用延迟到外层函数返回。
语法格式为:
defer func1()
defer func2(a, b)
只有在函数退出时才会执行被延迟的函数调用。
二、栈结构
defer语句使用栈结构来保存和调用函数。
- defer语句产生一个栈帧
- 多个defer会形成多个栈帧
- 函数返回时,按栈方式出栈调用函数
这意味着:
- 后defer的先出栈
- 先defer的后执行
三、实例
func main() {
defer fmt.Println(1)
defer fmt.Println(2)
fmt.Println(3)
}
// 输出:
// 3
// 2
// 1
四、应用场景
defer主要用于资源释放,例如:
- 关闭文件
- 释放锁
- 关闭数据库 等等
总的来说,defer 的工作原理为:
- 使用栈结构保存函数
- 多条defer形成多个栈帧
- 函数返回时,按栈方式出栈执行函数
- 常用于资源释放
通过这种方式,可以保证函数运行完毕后,资源总可以被正确释放。它的使用可以简化代码,减少错误。