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

时间:2015-01-29 17:18:10

标签: google-app-engine go google-cloud-datastore

我最近收到的错误是我在制作简单的datastore.GetAll()请求时从未见过的错误。我无法弄清楚它的含义,我找不到任何包含错误消息的文档或Google错误消息的任何帮助。

这是我的代码:

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 query
func (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 个答案:

答案 0 :(得分:1)

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

如果使用关键字创建结构而不指定字段的起始值,则默认情况下会给出0&#s; s。映射到字符串时,它是"" (空)。 Go实际上为你提出了一个非常有用的错误。

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