小编典典

为什么在Go AppEngine aetest中使用datastore.PropertyList使用datastore.Put获得“无效实体类型”?

go

该测试失败并 partnermerge_test.go:22: datastore: invalid entity type

package bigdipper

import (
    "testing"

    "appengine/aetest"
    "appengine/datastore"
)

func TestCreateMigrationProposal(t *testing.T) {
    c, err := aetest.NewContext(nil)
    if err != nil {
            t.Fatal(err)
    }
    defer c.Close()
    if _, err := datastore.Put(
            c,
            datastore.NewKey(c, "ORDER", "order-id-1", 0, nil),
            datastore.PropertyList{}); err != nil {
            t.Fatal(err)
    }
}

阅读 235

收藏
2020-07-02

共1个答案

小编典典

datastore.Put函数文档说:

Put使用键k将实体src保存到数据存储中。src必须是结构指针或实现PropertyLoadSaver;如果是结构指针,则该结构的任何未导出字段都将被跳过。如果k是不完整的密钥,则返回的密钥将是由数据存储区生成的唯一密钥。

尝试将其与PropertyList一起使用时,这有些令人困惑src。PropertyList不实现PropertyLoadSaver,但*
PropertyList实现。在PropertyList之前添加&以获得指向它的指针可修复此测试。

package bigdipper

import (
    "testing"

    "appengine/aetest"
    "appengine/datastore"
)

func TestCreateMigrationProposal(t *testing.T) {
    c, err := aetest.NewContext(nil)
    if err != nil {
            t.Fatal(err)
    }
    defer c.Close()
    if _, err := datastore.Put(
            c,
            datastore.NewKey(c, "ORDER", "order-id-1", 0, nil),
            &datastore.PropertyList{}); err != nil {
            t.Fatal(err)
    }
}
2020-07-02