gpt4 book ai didi

go - Go 代码如何计划异常( panic )?

转载 作者:数据小太阳 更新时间:2023-10-29 03:25:18 25 4
gpt4 key购买 nike

我不会围棋。我正在浏览文档以了解该语言,并遇到了 Defer Panic Recover 功能。

panic 似乎像异常一样工作。但是我找不到我的代码如何防止这些异常,这些异常可以由我调用的层下面的层抛出。 Java 有检查异常。 Go有类似的东西吗?

这是如何运作的?

编辑:似乎有两种思考方式

  1. panic 非常罕见,应该允许它终止程序,如所述here
  2. Panic 可以用在常规代码流中——作为 defer panic 的一个例子,解释为 here ,其中描述了如何将其用于格式错误的输入。

我的问题是关于在类似 2 的情况下使用 panic,这似乎很容易实现。

最佳答案

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

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

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

关于go - Go 代码如何计划异常( panic )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679677/

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