首页 文章

如何忽略datastore.Query.GetAll()中的错误?

提问于
浏览
2

我刚刚开始使用Go运行时开发一个GAE应用程序,到目前为止,这是一种乐趣 . 但是,我遇到了以下挫折:

我正在利用数据存储区提供的灵活性,通过使用相同的实体名称("Item")保存具有不同属性的多个不同结构 . Go language datastore reference表示"the actual types passed do not have to match between Get and Put calls or even across different App Engine requests",因为实体实际上只是一系列属性,因此可以存储在可以支持它们的适当容器类型中 .

我需要查询存储在实体名称"Item"下的所有实体,并将它们一次编码为JSON . 使用该实体属性灵活性对我有利,可以将查询的实体存储到任意 datastore.PropertyList 中,但是,当查询实体的属性无法正确表示时, GetGetAll 函数返回 ErrFieldMismatch (也就是说,不兼容的类型,或只是一个缺失的值) . 我保存的所有这些结构都是用户生成的,大多数值都是可选的,因此将空值保存到数据存储区中 . 使用空值保存这些结构时没有问题(数据存储区再次灵活),但有时检索它们 .

在数据存储区Go文档中还指出,由 Get 方法的调用者决定是否由于空值而返回的错误是可忽略,可恢复或致命的 . 我想知道如何正确地执行此操作,因为只是忽略错误是不够的,因为当查询导致此错误时,查询的目标结构( datastore.PropertyList )根本没有填充 .

提前谢谢你,对这个冗长的问题感到抱歉 .

更新:这是一些代码

query := datastore.NewQuery("Item") // here I use some Filter calls, as well as a Limit call and an Order call
items := make([]datastore.PropertyList, 0)
_, err := query.GetAll(context, &items) // context has been obviously defined before
if err != nil {
    // something to handle the error, which in my case, it's printing it and setting the server status as 500
}

更新2:这是一些输出

如果我使用 make([]datastore.PropertyList, 0) ,我会得到:

datastore: invalid entity type

如果我使用 make(datastore.PropertyList, 0) ,我会得到这个:

datastore: cannot load field "Foo" into a "datastore.Property": no such struct field

在两种情况下(我认为可以丢弃的第一个可以丢弃) items 我得到这个:

[]

1 回答

  • 1

    根据following post,go数据存储模块尚不支持PropertyList .

    使用指向 datastore.Map 切片的指针 .

相关问题