Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine GAE Go&x2014;如何对不存在的实体键使用GetMulti?_Google App Engine_Google Cloud Datastore_Go - Fatal编程技术网

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
  }
}