无法将我的结构放到数据存储区(golang)

时间:2013-08-16 16:05:11

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

这是我的结构:

type AreaPrerequisite struct {
    SideQuestId   int // 
    SideQuestProg int // progress
}

type AreaInfo struct {
    Id                int              `datastore:""`
    Name              string           `datastore:",noindex"`
    ActionPoint       int              `datastore:",noindex"`
    Prerequisite      AreaPrerequisite `datastore:",noindex"`

    // ignored:
    DsMonsters        []byte           `datastore:"-"`
    DsStages          []byte           `datastore:"-"`
    Monsters          AreaMonsters     `datastore:"-"`
    Stages            []*StageEntry    `datastore:"-"`
}

和我的put()调用:

key := datastore.NewKey(c, "Area", "", int64(pArea.Id), nil)
_, err := datastore.Put(c, key, *pArea)
if err != nil {
    return err
}

尝试放入DS时出现以下错误:

datastore: invalid entity type

我检查了文档: https://developers.google.com/appengine/docs/go/datastore/reference

数据存储区:“ - ”应标记数据存储区忽略的某些不受支持的字段。 不知道为什么会失败。

2 个答案:

答案 0 :(得分:16)

我发现我不小心将*添加到pArea作为arg to put()所以它传递一个值而不是指针,导致无效的实体类型错误。

答案 1 :(得分:4)

我也遇到了同样的问题,在我的情况下,我并没有将&放在要投入的实体之前。

key := datastore.NewKey(c, "Area", "", int64(pArea.Id), nil)
_, err := datastore.Put(c, key, &pArea)
if err != nil {
    return err
}

请注意&pArea

之前的&