【问题标题】:Why do I get "invalid entity type" with datastore.Put using a datastore.PropertyList in a Go AppEngine aetest?为什么我在 Go AppEngine aetest 中使用 datastore.PropertyList 使用 datastore.Put 得到“无效的实体类型”?
【发布时间】:2015-06-11 21:54:46
【问题描述】:

此测试以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)
    }
}

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    docs for the datastore.Put function 说:

    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)
        }
    }
    

    【讨论】:

    • 这是不正确的。它需要 PropertyLoadSavernot *PropertyLoadSaver。那是*PropertyList实现的接口类型,这就是为什么你需要传递&datastore.PropertyList{}而不是datastore.PropertyList{}
    • 感谢您的更正,我将编辑我的答案。我现在在cloud.google.com/appengine/docs/go/datastore/reference 中看到“*PropertyList 类型实现 PropertyLoadSave”我不知道指向类型的指针可以实现接口。
    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 2016-12-26
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多