英文:
GoLang mgo - mgo.ErrNotFound for find(...).All(...)
问题
我有一段GoLang代码:
c.Find(selectQuery).All(&results)
if err == mgo.ErrNotFound {
// 错误处理
}
这里的selectQuery
值并不重要。
我从来没有收到过ErrNotFound
错误。即使查询不匹配任何结果,我也没有收到ErrNotFound
。我得到的是具有空属性的result
变量。我应该如何修改代码来处理ErrNotFound
的情况?
英文:
I have a GoLang code:
c.Find(selectQuery).All(&results)
if err == mgo.ErrNotFound {
// error handling
}
selectQuery
value is not important here.
I never get error ErrNotFound
. Even if the query doesn't match any results I don't get ErrNotFound
. I get variable result
with empty attributes. How should I change the code to handle ErrNotFound
case?
答案1
得分: 8
Query.All()
方法永远不会返回mgo.ErrNotFound
,所以检查这个是没有意义的。如果没有结果,results
的长度将为0,这样你就可以检测是否有错误:
err := c.Find(selectQuery).All(&results)
if err != nil {
// 错误处理
return
}
// 如果你必须检测“未找到”的情况:
if len(results) == 0 {
// 没有结果
}
mgo.ErrNotFound
通常由其他方法使用/返回,通常是那些应该操作单个文档的方法,比如Query.One()
或Query.Apply()
。
英文:
Query.All()
never returns mgo.ErrNotFound
, so it's useless to check for that. If there are no results, the length of results
will be 0, so that's how you can detect that if there were no errors:
err := c.Find(selectQuery).All(&results)
if err != nil { {
// error handling
return
}
// If you must detect "not found" case:
if len(results) == 0 {
// No results
}
mgo.ErrNotFound
is used / returned by other methods, usually by those which ought to operate on a single document, such as Query.One()
or Query.Apply()
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论