Google app engine GAE Go&x2014;如何对不存在的实体键使用GetMulti?
我发现自己需要对一些实体存在的键数组执行Google app engine GAE Go&x2014;如何对不存在的实体键使用GetMulti?,google-app-engine,google-cloud-datastore,go,Google App Engine,Google Cloud Datastore,Go,我发现自己需要对一些实体存在的键数组执行GetMulti操作,但有些实体不存在 下面我的当前代码返回一个错误(数据存储:没有这样的实体) err:=datastore.GetMulti(c、键、信息) 那我该怎么做呢?我会使用“get或insert”方法,但没有。在这种情况下,GetMulti可以返回一个。通过这个循环,寻找答案。例如: if err := datastore.GetMulti(c, keys, dst); err != nil { if me, ok := err.(a
GetMulti
操作,但有些实体不存在
下面我的当前代码返回一个错误(数据存储:没有这样的实体
)
err:=datastore.GetMulti(c、键、信息)
那我该怎么做呢?我会使用“get或insert”方法,但没有。在这种情况下,GetMulti可以返回一个。通过这个循环,寻找答案。例如:
if err := datastore.GetMulti(c, keys, dst); err != nil {
if me, ok := err.(appengine.MultiError); ok {
for i, merr := range me {
if merr == datastore.ErrNoSuchEntity {
// keys[i] is missing
}
}
} else {
return err
}
}
我知道这个话题已经讨论了好几天了,但我想发布一个替代方案,使用类型切换
如果使用类型断言,可以缩短该块。如果是me,ok:=err.(appengine.MultiError);好的{{…}}谢谢。这就是你的意思吗?是的,你也可以删除else子句,只返回一行以下的err:-)在else情况下,有一个真正的错误,我们想指出一些问题,所以我认为保留它是有意义的。啊,是的,因为你仍然需要访问err对象。说得好。
if err := datastore.GetMulti(c, keys, dst); err != nil {
switch errt := err.(type) {
case appengine.MultiError:
for ix, e := range errt {
if e == datastore.ErrNoSuchEntity {
// keys[ix] not found
} else if e != nil {
// keys[ix] have error "e"
}
}
default:
// datastore returned an error that is not a multi-error
}
}