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

Go 中奇怪的数据存储错误,“种类是空字符串”

Go 中奇怪的数据存储错误,“种类是空字符串”

Go
白衣染霜花 2021-09-13 14:46:04
我最近在发出一个简单的 datastore.GetAll() 请求时遇到一个我以前从未见过的错误。我无法弄清楚这意味着什么,我找不到任何包含错误消息的文档或从谷歌搜索错误消息的任何帮助。这是我的代码:type MyUnderlyingStruct struct {    ApplyTo             *datastore.Key    ApplyFrom           *datastore.Key    Amount              float64    LocationKey         *datastore.Key    DepartmentKey       *datastore.Key    SubjectAreaKey      *datastore.Key}type MyStruct []MyUnderlyingStruct //In the case where I get the error someKey is a valid, complete Key value//  of a different kind that what we are querying for and there is actually//  an entity in my datastore that matches this queryfunc (x *MyStruct) Load(w http.ResponseWriter, r *http.Request, someKey *datastore.Key) (error) {    c := appengine.NewContext(r)    q := datastore.NewQuery("MyUnderlyingStruct_KindName").Order("-Amount")    if someKey != nil { q = q.Filter("ApplyTo=", someKey) }    keys, err := q.GetAll(c,x)    if _, ok := err.(*datastore.ErrFieldMismatch); ok { err = nil }    if err != nil && err != datastore.Done {return err}    return nil}返回此错误:API error 1 (datastore_v3: BAD_REQUEST): The kind is the empty string.谁能告诉我为什么我会收到这个错误,或者它想告诉我什么?
查看完整描述

1 回答

?
aluckdog

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

乍一看您的问题(因为我不熟悉 Google 的数据存储 API),在我看来,问题是使用new关键字进行零内存初始化的结果。

当使用关键字创建结构体而不为字段分配起始值时,默认值为 0。当映射到字符串时,它是“”(空)。Go 实际上为你抛出了一个非常有用的错误。

正如您所指出的,您已经使用了Mykey := new(datastore.Key). 感谢您的慷慨解囊,这可以作为未来用户的答案。


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

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