【问题标题】:How can Go code plan for exceptions (panic)?Go 代码如何规划异常(恐慌)?
【发布时间】:2017-04-28 11:57:31
【问题描述】:

我不知道围棋。我正在阅读文档以了解该语言并遇到了延迟恐慌恢复功能。

恐慌似乎像例外一样起作用。但是,我找不到我的代码如何防范这些异常,这些异常可能会被我调用的层之下的层抛出。 Java 已检查异常。 Go有类似的东西吗?

这是如何工作的?

编辑:似乎有两种方法可以考虑这个

  1. 恐慌是非常罕见的,应该允许它杀死程序,如here 所述
  2. 恐慌可用于常规代码流 - 作为延迟恐慌的示例,如here 所述,它描述了如何将其用于格式错误的输入。

我的问题与在 2 等情况下使用恐慌有关,这似乎很容易做到。

【问题讨论】:

标签: go


【解决方案1】:

当然,您可以使用 panic 来控制程序的常规流程,但我认为更惯用的方法是在这种情况下(例如用户输入格式错误的情况)向调用者返回错误。

恐慌通常用于暗示程序中存在某种错误的特殊情况。如果出现问题,您可以自己调用 panic,但在 nil 指针取消引用、越界数组访问和其他类似情况下也会自动调用。通常这样的事情会使程序崩溃,这是默认情况下发生的,但如果你的程序是某种服务,你可能不希望整个程序崩溃,你只希望它在遇到它时停止它正在做的事情崩溃并恢复正常状态。

以 Web 服务器为例,如果某些奇怪的请求由于某些错误导致超出范围的数组访问。您不希望整个服务器崩溃,而是希望它退出该请求的处理函数,但继续侦听新请求。在您的示例二中很好地描述了这样做的方法。因此,您在希望恐慌停止的地方推迟了一个恢复()函数。如果恢复返回一个错误,你就知道你的程序是恐慌的。然后你可以做一些记录,也许给自己发一封电子邮件说有问题等等,然后继续正常的程序流程。但是如果你有一些验证函数发现请求有问题,你可能不希望它恐慌。相反,您希望它向调用者(请求处理程序)返回错误,然后该调用者可以用 400 错误请求回答请求,然后正常退出处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2018-10-28
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2013-09-03
    相关资源
    最近更新 更多