2017-06-01 33 views
3

我有一個GoLang代碼:GoLang氧化鎂 - mgo.ErrNotFound爲查找(...)所有(...)

c.Find(selectQuery).All(&results) 
if err == mgo.ErrNotFound { 
// error handling 
} 

selectQuery價值在這裏並不重要。我不會收到錯誤ErrNotFound。即使查詢不符合任何結果,我也不會收到ErrNotFound。變量result具有空屬性。如何更改代碼以處理ErrNotFound大小寫?

回答

5

Query.All()永遠不會返回mgo.ErrNotFound,所以檢查它是沒有用的。如果沒有業績,results長度爲0,那麼這就是你如何檢測如果沒有任何錯誤:

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用於/由其他方法返回,通常是由那些應該在單個文檔上運行,如Query.One()Query.Apply()

+0

謝謝你的回答。 有趣的是,我從來沒有得到0的len(結果)。如果我的查詢不符合我得到的任何結果: [{電子郵件:姓名:}] 因此,我的len(結果)等於1 – poulius

+1

@poulius然後可能你**做**有一個結果文檔,其空字符串作爲它的Email和Name(或簡單地說這些字段丟失或錯誤映射)。 – icza

+0

哦,對不起,是的,你說得對,我的selectQuery有一些東西 – poulius