知识卡片
defer保证清理代码无论如何执行
内容
在一次函数或方法调用前加上 defer 关键字,Go 会把这次调用推迟到当前函数即将退出的那一刻才 真正执行,不管函数是正常走到末尾退出,还是中途因为某个 return 提前退出——都会先跑完所有被 延迟的调用再真正返回。发散:defer 的 价值在于把”资源要在用完后释放”这条规则从”记得在每个 return 前都写一遍”,变成”写一次, 交给运行时保证执行”,减少的是人为遗漏的可能性,而不是减少了要做的事情本身。
参考来源
- 位置:《Head First Go语言程序设计》第12章《重新站起来:从失败中恢复》(源文件:_epub-src/index_split_003.html)
- 结论依据:原文围绕“在一次函数或方法调用前加上defer关键字,Go会把这次调用推迟到当前函数即将退出的那一刻才真正执行,不管函数是正常走到…”展开机制、顺序或组件关系说明;摘录中的关键步骤和术语支撑本卡片正文及结构图。
- 原始内容:,Fprintln返回成功写入文件的字节数(我们忽 略它),以及遇到的任何错误(我们将其传递给check函数)。 最后,我们调用文件上的Close方法。你可能注意到,我们没有使 用defer关键字。这是因为我们正在写文件,而不是在读文件。对要写入 的文件调用Close可能会导致错误,并且这些错误需要进行处理,如果 使用defer,我们无法立即处理这些错误。因…