猿问

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

我最近在发出一个简单的 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 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.

谁能告诉我为什么我会收到这个错误,或者它想告诉我什么?


白衣染霜花
浏览 170回答 1
1回答

aluckdog

乍一看您的问题(因为我不熟悉 Google 的数据存储 API),在我看来,问题是使用new关键字进行零内存初始化的结果。当使用关键字创建结构体而不为字段分配起始值时,默认值为 0。当映射到字符串时,它是“”(空)。Go 实际上为你抛出了一个非常有用的错误。正如您所指出的,您已经使用了Mykey := new(datastore.Key). 感谢您的慷慨解囊,这可以作为未来用户的答案。
随时随地看视频慕课网APP

相关分类

Go
我要回答