在 Golang 中的 Google 数据存储上使用任意键数组进行查询
Querying with an array of arbitrary keys on Google datastore in Golang
这个问题的延续:
现在,我正在按照上一个问题中关于使用 keys/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
另一方面,我可以单独抓取每一个,但是有没有更有效的方法来解决这个问题?
您需要向 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
这个问题的延续:
现在,我正在按照上一个问题中关于使用 keys/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
另一方面,我可以单独抓取每一个,但是有没有更有效的方法来解决这个问题?
您需要向 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