Arc*_*hie 29 exception-handling go
我想知道...我前段时间读过关于Go的内容,我试图在其中编写一些东西.我觉得很有意思.但是我已经用这种语言处理了"例外".我已经阅读了他们的方法,这似乎是合理的.我想知道标准特殊方法相比Go的风格有什么优势?优缺点都有什么?
编辑直截了当:我不想对异常进行任何神圣的战争.我只是想知道这种处理错误的风格是否有任何优势?与标准例外相比,这种风格的实际优势是什么?值得怀疑的是什么?
Krz*_*zyk 51
恐慌/恢复在道德上等同于尝试/捕获异常.有明显的差异(语法)和预期用途的微妙但重要的区别.
一般情况下异常问题的最佳解释是"更清洁,更优雅,更错误",这是对异常与返回错误代码的优缺点的良好概述.
Go设计师决定通过从函数返回错误代码来进行错误处理是惯用的Go方式,并且语言支持多个返回值以使其在语法上更容易.虽然提供了恐慌/恢复,但差异不是功能性而是预期用途.
暴露异常的其他语言促进了它们的使用,并且在实践中它们经常被使用(有时甚至被误用).
劝阻不要使用恐慌/恢复.你可以这样做,但你只能在非常有限的情况下这样做.
如果你看一下Go自己的标准库,恐慌的大多数用途都是发出致命错误的信号,指示库代码中的内部错误(即错误)或用错误的数据调用库(例如将非json数据传递给json解码函数) ).
但正如您链接的文章所指出的那样:"Go库中的约定是即使包在内部使用panic,它的外部API仍会显示明确的错误返回值."
这与C#,Java,Python或C++等语言不同,其中许多标准库代码可能会引发异常信号错误.这些语言希望您使用异常.劝阻不要使用恐慌/恢复.
总结一下:
在实践中,重要的是使用语言的惯用风格.在Go中返回错误代码并避免恐慌/恢复.在C#中,使用异常来发出一些错误信号.