【发布时间】:2019-04-28 09:44:10
【问题描述】:
defer 关键字的实际用途是什么?
例如,不要这样写:
func main() {
f := createFile("/tmp/defer.txt")
defer closeFile(f)
writeFile(f)
}
我可以这样写:
func main() {
f := createFile("/tmp/defer.txt")
writeFile(f)
closeFile(f)
}
那么,我为什么要使用它而不是通常的函数放置呢?
【问题讨论】:
-
在您的简单示例中,没有什么理由(除了好的做法)。但是,在更复杂/更大的函数中,您使用 defer() 来确保无论函数如何结束都会执行某些操作——主要是未捕获的错误。例如,当我分配数据库句柄时,我总是立即执行 defer() 来关闭句柄。
-
向该代码添加错误处理,这应该很明显。
-
不能说得够多:您需要养成处理一切上可能出现的错误的习惯。一旦您真正开始这样做,
defer就会成为在出现问题时进行清理的非常明显的方式。
标签: go