首页 文章

在Golang中使用Google数据存储区中的一系列任意键进行查询

提问于
浏览
1

这个问题的延续:

使用golang在google app引擎数据存储区上执行“IN Array”查询

现在,我遵循上一个问题的建议,即使用一组键/ ids ids []int64 查询 . 这些ID实际上可能存在也可能不存在(它们已被删除,但其他实例上的引用尚未删除) .

我尝试获取这些实例的方法如下:

var keys []*datastore.Key

for _, id := range ids {
    keys = append(keys, datastore.NewKey(c, "Category", "", id, nil))
}

categories := make([]Category, len(keys))
err := datastore.GetMulti(c, keys, categories)
if err != nil {
    return nil, err
}

for i := 0; i < len(categories); i++ {
    categories[i].Id = keys[i].IntID()
}

然而,它错误地抛弃了我:

datastore: no such entity

另一方面,我可以单独 grab 每一个,但有没有更有效的方法来解决这个问题?

1 回答

  • 2

    您需要键入断言错误到appengine.MultiError . 这样,您就可以访问单个实体的错误 .

    if me, ok := err.(appengine.MultiError); ok {
        for i, e := range me {
            // e != nil if entity i failed
        }
    } else {
       // something else went wrong (timeout, etc).
    }
    

    请参阅MultiError的文档here

相关问题