Defer

尽管 Go 有一个垃圾回收器,一些资源仍然需要我们显式地释放他们。例如,我们需要在使用完文件之后 Close() 他们。这种代码总是很危险。一方面来说,当我们在写一个函数的时候,很容易忘记关闭我们声明了 10 行的东西。另一方面,一个函数可能有多个返回点。Go 给出的解决方案是使用 defer 关键字:

package main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("a_file_to_read")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()
  // 读取文件
}

如果你尝试运行上面的代码,你将会得到错误(文件不存在)。这里只是演示 defer 如何工作。无论什么情况,在函数返回之后(本例中为 main() ),defer 将被执行。这使您可以在初始化的位置附近释放资源并处理多个返回点。

热门教程

最新教程