3 回答
TA贡献1735条经验 获得超5个赞
我一直在思考这个问题,以寻求最佳答案。仅仅指出恐慌/恢复的惯用用法,而不是try / catch&| 其他语言中的例外或这些成语背后的概念(可以概括为“例外应仅在真正特殊的情况下发生”)
但是,它们之间的实际区别是什么?我会尽力总结一下。
与try / catch块相比,主要区别之一是控制流的方式。在典型的try / catch场景中,除非传播错误,否则catch块之后的代码将运行。对于panic / recover并非如此。紧急情况会中止当前函数,并开始展开堆栈,并在遇到延迟函数时运行延迟函数(唯一的地方recover会执行任何操作)。
真的,我会更进一步:恐慌/恢复几乎没有像try / catch那样的意思,因为try和catch是(或至少表现得像)控制结构,而panic / recover不是。
这实际上源于以下事实:恢复是围绕延迟机制构建的,据我所知,延迟机制在Go中是一个非常独特的概念。
当然还有更多,如果我能更好地激发自己的想法,我会添加更多内容。
TA贡献2037条经验 获得超6个赞
紧急/恢复范围内的功能。这就像说您在每个函数中只允许一个try / catch块,而try必须覆盖整个函数。这使得以Java / python / c#等使用异常的相同方式使用Panic / Recover非常令人讨厌。这是故意的。这也鼓励人们以设计使用的方式使用Panic / Recover。您应该从panic()中恢复(),然后将错误值返回给调用方。
TA贡献1995条经验 获得超2个赞
我认为我们都同意panic
是throw
,recover
是catch
和defer
是finally
。
最大的区别似乎recover
就在里面defer
。回到传统术语,它使您可以准确地决定要在哪一点上finally
打扰catch
任何事情,或者根本不打扰。
- 3 回答
- 0 关注
- 242 浏览
添加回答
举报