9

这是我的结构:

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

datastore:"-" 应该标记一些数据存储忽略的不支持的字段。不知道为什么会失败。

4

2 回答 2

16

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

于 2013-08-17T04:30:02.833 回答
4

我也遇到了同样的问题,就我而言,我没有放在&要放置的实体之前。

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

注意&之前&pArea

于 2015-10-05T07:16:54.153 回答