我将实体(作为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贡献1796条经验 获得超10个赞
尝试用大写字母写出您的字段名称,例如,而不是age
write Age
。这告诉Go,您的字段已导出(这与公共变量的概念相似,尽管远不止于此)。
根据Go数据存储区文档(请参阅“函数”部分中的Get方法),如果将字段加载为不同于存储字段的类型,或者当字段被加载时,Get
或GetAll
方法调用将返回ErrFieldMismatch
“在目标struct中丢失或未导出。仅当dst是结构指针时才返回ErrFieldMismatch。” 我最好的猜测是,由于您将其存储为PropertyList
带有未导出名称的,并且由于数据存储区在其模型中具有灵活性,因此由于它们的小写字母,它将原始值视为未导出。
我目前遇到相同的错误,但是由于某些空字段,我设法将其跟踪。
如果这样可以解决您的问题,请告诉我。
- 3 回答
- 0 关注
- 223 浏览
添加回答
举报
0/150
提交
取消