延迟的可能用例是什么?

时间:2019-04-28 09:44:11

标签: go

defer关键字的实际用途是什么?

例如,而不是这样写:

func main() {
    f := createFile("/tmp/defer.txt")
    defer closeFile(f)
    writeFile(f)
}

我可以这样写:

func main() {
    f := createFile("/tmp/defer.txt")
    writeFile(f)
    closeFile(f)
}

那么,为什么我应该使用它而不是通常放置函数?

2 个答案:

答案 0 :(得分:2)

即使在发生紧急情况或return语句之后,延迟函数也始终会执行。

在现实世界的代码中,打开/关闭类型的调用对之间会发生很多事情,而defer使您可以在源代码中将它们保持在一起,而不必为每个return语句重复执行Close调用。 / p>

去写一些真实的代码。不久之后,defer的作用将显而易见。

答案 1 :(得分:0)

在捕获有可能发生恐慌的代码时非常有用。

通常在使用interface{}(“任何”类型)或反射时,您会遇到尝试转换为与数据的实际类型不匹配的类型的问题。

defer在顶部处理该错误的功能是节省时间并保持应用程序运行的方式。