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
  }