猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
在Go中进行恐慌恢复与尝试其他语言的捕获
我刚刚阅读了有关Go中Panic / Recover的帖子,但尚不清楚它与其他主流语言中的try / catch有何不同。
绝地无双
浏览 243
回答 3
3回答
喵喔喔
我一直在思考这个问题,以寻求最佳答案。仅仅指出恐慌/恢复的惯用用法,而不是try / catch&| 其他语言中的例外或这些成语背后的概念(可以概括为“例外应仅在真正特殊的情况下发生”)但是,它们之间的实际区别是什么?我会尽力总结一下。与try / catch块相比,主要区别之一是控制流的方式。在典型的try / catch场景中,除非传播错误,否则catch块之后的代码将运行。对于panic / recover并非如此。紧急情况会中止当前函数,并开始展开堆栈,并在遇到延迟函数时运行延迟函数(唯一的地方recover会执行任何操作)。真的,我会更进一步:恐慌/恢复几乎没有像try / catch那样的意思,因为try和catch是(或至少表现得像)控制结构,而panic / recover不是。这实际上源于以下事实:恢复是围绕延迟机制构建的,据我所知,延迟机制在Go中是一个非常独特的概念。当然还有更多,如果我能更好地激发自己的想法,我会添加更多内容。
0
0
0
阿晨1998
紧急/恢复范围内的功能。这就像说您在每个函数中只允许一个try / catch块,而try必须覆盖整个函数。这使得以Java / python / c#等使用异常的相同方式使用Panic / Recover非常令人讨厌。这是故意的。这也鼓励人们以设计使用的方式使用Panic / Recover。您应该从panic()中恢复(),然后将错误值返回给调用方。
0
0
0
拉风的咖菲猫
我认为我们都同意panic是throw,recover是catch和defer是finally。最大的区别似乎recover就在里面defer。回到传统术语,它使您可以准确地决定要在哪一点上finally打扰catch任何事情,或者根本不打扰。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Go
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续