尽管go语言提供了垃圾回收器,但是有些资源需要我们明确的去释放。例如,当我们处理完一个文件事,需要使用Close()关闭文件。这类代码总是危险的。首先,当我们写一个函数时,很容易忘记关闭在第十行声明的某些东西。另外,一个函数可能会有多个返回点。go的解决方法会是提供了defer关键字:
Close()
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是如何工作。无论如何你的defer都会在方法返回时得到执行,虽然这有点极端。但是这可以帮你在初始化的附近释放资源,并且可以实现多个返回点。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8