• 5.2 defer
    • 链接

    5.2 defer

    尽管go语言提供了垃圾回收器,但是有些资源需要我们明确的去释放。例如,当我们处理完一个文件事,需要使用Close()关闭文件。这类代码总是危险的。首先,当我们写一个函数时,很容易忘记关闭在第十行声明的某些东西。另外,一个函数可能会有多个返回点。go的解决方法会是提供了defer关键字:

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. func main() {
    7. file, err := os.Open("a_file_to_read")
    8. if err != nil {
    9. fmt.Println(err)
    10. return
    11. }
    12. defer file.Close()
    13. // 读这个文件
    14. }

    如果你试着运行上面的代码,你可能会得到一个错误(因为文件不存在)。关键在于展示defer是如何工作。无论如何你的defer都会在方法返回时得到执行,虽然这有点极端。但是这可以帮你在初始化的附近释放资源,并且可以实现多个返回点。

    链接

    • 目录
    • 上一节:错误处理
    • 下一节:go语言风格