浏览 40
更新于 2020-08-23 08:39
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
将被执行。这使您可以在初始化的位置附近释放资源并处理多个返回点。