我发现自己需要做一个 GetMulti
使用一些键存在的操作,但有些实体不存在。
我下面的当前代码返回错误(datastore: no such entity
)。
err := datastore.GetMulti(c, keys, infos)
那我该怎么做呢?我使用“获取或插入”方法,但没有一个。
我发现自己需要做一个 GetMulti
使用一些键存在的操作,但有些实体不存在。
我下面的当前代码返回错误(datastore: no such entity
)。
err := datastore.GetMulti(c, keys, infos)
那我该怎么做呢?我使用“获取或插入”方法,但没有一个。
GetMulti可以返回一个 appengine.MultiError
在这种情况下。循环通过并寻找 datastore.ErrNoSuchEntity
。例如:
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
}
}
GetMulti可以返回一个 appengine.MultiError
在这种情况下。循环通过并寻找 datastore.ErrNoSuchEntity
。例如:
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
}
}
我知道这个话题已经持续了几天,但我想发布一个替代方案,使用 型开关。
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
}
}