gpt4 book ai didi

exception-handling - Google Go 语言中的异常处理

转载 作者:IT老高 更新时间:2023-10-28 13:00:50 25 4
gpt4 key购买 nike

我想知道...我前段时间读过有关 Go 的文章,并尝试在其中编写一些东西。我似乎很有趣。但我已经达到handling "exceptions" in this language .我已经阅读了他们的方法,这似乎是合理的。我想知道标准异常方法相对于 Go 风格的优势是什么?有什么好处和坏处?

编辑坦率地说:我不想对异常(exception)进行任何圣战。我只是想知道这种处理错误的方式是否有任何优势?与标准异常相比,这种风格的实际优势是什么?值得怀疑吗?

最佳答案

panic/recover 在道德上等同于 try/catch 异常。存在表面差异(语法)和预期用途的细微但重要的差异。

对一般异常问题的最佳解释是"Cleaner, more elegant, wrong"这很好地概述了异常与返回错误代码的优缺点。

Go 设计者认为通过从函数返回错误代码来处理错误是惯用的 Go 方式,并且该语言支持多个返回值以使其在语法上更容易。虽然提供了 panic/recover ,但区别不在于功能,而在于预期用途。

其他暴露异常的语言促进了它们的使用,并且在实践中它们被频繁使用(有时甚至被滥用)。

Go 不鼓励使用 panic/recover 。你可以这样做,但你只能在非常有限的情况下这样做。

如果你查看 Go 自己的标准库,大多数 uses of panic用于发出 fatal error 信号,指示库代码中的内部错误(即错误)或使用错误数据调用库(例如,将非 json 数据传递给 json 解码函数)。

但正如您链接到的文章所指出的那样:“Go 库中的约定是,即使包在内部使用 panic ,其外部 API 仍会显示显式错误返回值。”

这与 C#、Java、Python 或 C++ 等语言不同,在这些语言中,许多标准库代码可能会抛出异常以指示错误。这些语言希望您使用异常。 Go 不鼓励使用 panic/recover。

总结一下:

  • 惯用的 Go 风格是使用错误代码告诉调用者错误
  • 仅在极少数情况下使用紧急/恢复:
    • 在遇到内部不一致表明代码中存在错误时“崩溃”您的程序。它基本上是一种调试辅助工具。
    • 如果它极大地简化了代码中的错误处理(但如果代码要被其他人使用,切勿将此类 panic 暴露给调用者)

在实践中重要的是使用语言的惯用风格。在 Go 中,它返回错误代码并避免 panic/recover 。在 C# 中,它使用异常来表示一些错误。

关于exception-handling - Google Go 语言中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com