为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用结构数组实现 google datastore propertyloadsaver

如何使用结构数组实现 google datastore propertyloadsaver

Go
HUH函数 2023-07-10 10:45:11
当你有一个结构数组时,如何为谷歌数据存储实现 Load() 和 Save() ?显然这是可能的,但是如何呢?Person首先,当您允许数据存储本身将 a与对象列表序列化时Phone,您可以使用反射来查看它在内部创建一个*datastore.Entity对象列表:package mainimport (    "fmt"    "reflect"    "cloud.google.com/go/datastore")type Phone struct {    Type   string    Number string}type Person struct {    Name  string    Phone []Phone}func main() {    person := Person{Name: "Bob", Phone: []Phone{Phone{"a", "b"}, Phone{"c", "d"}}}    // save here    }}这是我到目前为止的工作,这保存了名称字段,但会导致对象出现错误*datastore.Entity。这是我的尝试:func (p *Person) Save() ([]datastore.Property, error) {    props := []datastore.Property{        {            Name:  "Name",            Value: p.Name,        },    }    var n []*datastore.Entity    for _, x := range p.Phone {        i1 := datastore.Property{Name: "Type", Value: x.Type}        i2 := datastore.Property{Name: "Number", Value: x.Number}        e := &datastore.Entity{Properties: []datastore.Property{i1, i2}}        n = append(n, e)    }    props = append(props, datastore.Property{Name:"Phone",Value:n})    return props, nil}数据存储区本身抱怨以下错误:invalid Value type []*datastore.Entity for a Property with Name "Phone"我想知道是否有人可以阐明我哪里出错了?如何以与数据存储本身相同的方式将结构数组保存在数据存储中?上面的示例代码位于 go Playground 上:https ://play.golang.org/p/AP1oFnlo1jm
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

经过一定量的实验后,发现这里是如何Save()为具有结构的对象实现方法。datastore.Property 必须存储持有数组[]interface{}而[]*datastore.Entity不是纯数组[]*datastore.Entity:


func (p *Person) Save() ([]datastore.Property, error) {

    props := []datastore.Property{

        {

            Name:  "Name",

            Value: p.Name,

        },

    }


    var n []interface{}

    for _, x := range p.Phone {

        i1 := datastore.Property{Name: "Type", Value: x.Type}

        i2 := datastore.Property{Name: "Number", Value: x.Number}

        e := &datastore.Entity{Properties: []datastore.Property{i1, i2}}

        n = append(n, e)

    }

    props = append(props, datastore.Property{Name:"Phone",Value:n})


    return props, nil

}


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信