mgo可以返回与QueryError或ErrNotFound不同的错误吗?什么与数据库连接错误?
对于与ErrNotFound不同的错误而恐慌并在http处理程序堆栈的顶部恢复时,使用状态500的漂亮响应是不错的做法?
答案 0 :(得分:5)
mgo返回的错误集不受约束,因为它在下面执行了许多操作,也可能返回错误(DNS解析,连接建立,超时等)。因此,使用mgo处理错误的正确方法与大多数地方相同:处理您所了解的并且具有自定义逻辑的方法,并对您没有的方法进行纾困。好的救助包括撤消任何本地副作用(关闭/删除本地创建的文件等),然后将错误返回给调用者,可能使用自定义上下文信息进行修饰或包装。
我不会对这些错误感到恐慌。恐慌通常是针对异常情况,例如,当开发人员对API出错时,或者环境严重受损时,最好的行动方法就是完全停止。与数据库(或与网络相关的任何网络)的连接应该预期每隔一段时间就会掉落一次,并进行适当处理,而不仅仅是记录无法区分的崩溃。
如果您有更多详细信息并希望进一步讨论,请转到邮件列表。
答案 1 :(得分:3)
我相信您可以使用LastError
检查任何错误。大多数错误返回函数返回标准Go error,应在函数返回时检查。
通常,在Go中,在使用恐慌/恢复之前,您需要一些非常特殊用例。最好的做法是在出现错误时进行处理。
有关详细信息,请参阅Error handling and Go中的Defer, Panic, and Recover和The Go Blog。