4

mgo可以返回不同于 QueryError 或 ErrNotFound 的错误吗?数据库连接错误怎么办?

对不同于 ErrNotFound 的错误感到恐慌并在 http 处理程序堆栈的顶部恢复状态为 500 的漂亮响应是一种好习惯吗?

4

2 回答 2

5

mgo 返回的错误集不受限制,因为它在下面执行许多操作,这些操作也可能返回错误(DNS 解析、连接建立、超时等)。因此,使用 mgo 处理错误的正确方法与大多数地方相同:处理您确实知道并具有自定义逻辑的错误,并为您不知道的错误提供救助。好的救助包括撤消任何本地副作用(关闭/删除本地创建的文件等),然后将错误返回给调用者,可能使用自定义上下文信息进行修饰或包装。

我不会对此类错误感到恐慌。恐慌通常是针对异常情况,例如,当开发人员对 API 做错了什么,或者环境受到严重破坏时,最好的做法是完全停止。与数据库(或任何与网络相关的)的连接应该每隔一段时间就会断开,并进行适当的处​​理,而不是仅仅记录无法区分的崩溃

如果您有更多详细信息并想进一步讨论,请访问邮件列表。

于 2013-10-09T21:36:39.860 回答
3

我相信你可以检查任何错误LastError。大多数错误返回函数都会返回一个标准的Go 错误,应该在函数返回时进行检查。

通常,在 Go 中,您需要一些非常特殊的用例,然后再求助于恐慌/恢复。最佳做法是在出现错误时对其进行处理。

有关更多信息,请参阅Go 博客中的错误处理和 GoDefer、Panic 和 Recover

于 2013-10-09T10:04:39.523 回答