为了账号安全,请及时绑定邮箱和手机立即绑定

将许多PropertyList放入Google App Engine数据存储区(在Go中)

将许多PropertyList放入Google App Engine数据存储区(在Go中)

Go
红糖糍粑 2021-04-25 14:57:04
我将实体(作为datastore.PropertyList)放入数据存储中,如下所示:// save onevar plist datastore.PropertyList = make(datastore.PropertyList, 3)plist = append(plist, datastore.Property { "name", "Mat", false, false })plist = append(plist, datastore.Property { "age", "29", false, false })plist = append(plist, datastore.Property { "location", "London", false, false })key := datastore.NewIncompleteKey(context, "Record", nil)datastore.Put(context, key, &plist)// save another onevar plist datastore.PropertyList = make(datastore.PropertyList, 3)plist = append(plist, datastore.Property { "name", "Laurie", false, false })plist = append(plist, datastore.Property { "age", "27", false, false })plist = append(plist, datastore.Property { "location", "London", false, false })key := datastore.NewIncompleteKey(context, "Record", nil)datastore.Put(context, key, &plist)一切正常(尽管上面的代码现在更像是伪代码)。我能够分别加载它们,并且datastore.PropertyList每个字段都随其单独提供datastore.Property。但是,当我尝试使用检索其中许多内容时Query,操作失败:query := datastore.NewQuery("Record")plists := make(datastore.PropertyList, 0, 10)keys, err := query.GetAll(context, &plists)我收到以下错误:datastore: cannot load field "age" into a "datastore.Property": no such struct field似乎并没有抱怨,Name因为那恰好是的有效属性datastore.Property,所以我如何获取它以按预期的方式加载项目,而每个项目plists都是datastore.PropertyList而不是datastore.Property?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

GetAll在给定的上下文中运行查询,并返回与该查询匹配的所有键,并将值附加到dst。dst必须是指向切片结构,结构指针或Map的指针。如果q是“仅键”查询,则GetAll忽略dst并仅返回键。

并且根据以下文章,go数据存储区模块尚不支持PropertyList。

请改用指向datastore.Map切片的指针。

另请注意,您需要进行通话make([]T, n)才能制作的切片T,而不是make(T, n)


查看完整回答
反对 回复 2021-05-10
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

尝试用大写字母写出您的字段名称,例如,而不是agewrite Age。这告诉Go,您的字段已导出(这与公共变量的概念相似,尽管远不止于此)。

根据Go数据存储区文档(请参阅“函数”部分中的Get方法),如果将字段加载为不同于存储字段的类型,或者当字段被加载时,GetGetAll方法调用将返回ErrFieldMismatch在目标struct中丢失或未导出。仅当dst是结构指针时才返回ErrFieldMismatch。” 我最好的猜测是,由于您将其存储为PropertyList带有未导出名称的,并且由于数据存储区在其模型中具有灵活性,因此由于它们的小写字母,它将原始值视为未导出。

我目前遇到相同的错误,但是由于某些空字段,我设法将其跟踪。

如果这样可以解决您的问题,请告诉我。


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信