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