Golang 延迟调用
优质
小牛编辑
148浏览
2023-12-01
Go 语言中没有提供其它面向对象语言的析构函数,但是 Go 语言提供了 defer 语句用于实现其它面向对象语言析构函数的功能
defer 语句常用于 释放资源
、解除锁定
以及 错误处理
等
- 例如C语言中我们申请了一块内存空间,那么不使用时我们就必须释放这块存储空间
- 例如C语言中我们打开了一个文件,那么我们不使用时就要关闭这个文件
- 例如C语言中我们打开了一个数据库, 那么我们不使用时就要关闭这个数据库
- 这一类的操作在Go语言中都可以通过defer语句来完成
无论你在什么地方注册 defer 语句,它都会在所属函数执行完毕之后才会执行,并且如果注册了多个 defer 语句,那么它们会按照 后进先出
的原则执行
- 正是因为 defer 语句的这种特性,所以在 Go 语言中关闭资源不用像 C 语言那样用完了再关闭,我们完全可以打开的同时就关闭,因为无论如何 defer 语句都会在所属函数执行完毕之后才会执行
package main import "fmt" func main() { defer fmt.Println("我是第一个被注册的") // 3 fmt.Println("main函数中调用的Println") // 1 defer fmt.Println("我是第二个被注册的") // 2 }