defer如何实现

在Go语言中,defer关键字用于在函数执行完成之前延迟执行某个语句或函数调用。defer语句将被推迟执行的函数或方法放入一个栈中,当包围的函数执行完毕时,栈中的函数将按照后进先出(LIFO)的顺序执行。

以下是defer的一些基本用法和示例:

示例1:延迟函数调用

  1. package main
  2. import "fmt"
  3. func main() {
  4. defer fmt.Println("World")
  5. fmt.Print("Hello, ")
  6. }

上述代码输出结果为:

  1. Hello, World

fmt.Println("World")语句被推迟执行,直到main函数执行完毕。

示例2:延迟语句块

  1. package main
  2. import "fmt"
  3. func main() {
  4. defer func() {
  5. fmt.Println("Deferred statement")
  6. }()
  7. fmt.Println("Main statement")
  8. }

上述代码输出结果为:

  1. Main statement
  2. Deferred statement

defer语句块中的内容被推迟执行,同样在main函数执行完毕后执行。

示例3:多个defer语句

  1. package main
  2. import "fmt"
  3. func main() {
  4. defer fmt.Println("First deferred statement")
  5. defer fmt.Println("Second deferred statement")
  6. fmt.Println("Main statement")
  7. }

上述代码输出结果为:

  1. Main statement
  2. Second deferred statement
  3. First deferred statement

多个defer语句按照后进先出的顺序执行。

defer通常用于在函数结束时执行一些清理工作,如关闭文件、释放资源等。在实际开发中,defer是一个非常方便的工具,可以帮助确保在函数执行完毕前执行必要的操作。