首页  >  文章  >  后端开发  >  如何使用 Go 处理 Google App Engine (GAE) 数据存储区中的嵌套结构?

如何使用 Go 处理 Google App Engine (GAE) 数据存储区中的嵌套结构?

Linda Hamilton
Linda Hamilton原创
2024-10-27 02:20:03260浏览

How do I work with nested structs in the Google App Engine (GAE) Datastore using Go?

Go 中 GAE 数据存储中的嵌套结构

问题:

如何在 Google App Engine 中使用嵌套结构(GAE) 使用 Go 时的数据存储?

答案:

Go 中的数据存储 API 不直接支持嵌套结构。不过,解决方案是利用 API 提供的 PropertyLoadSaver 接口。

实现:

  1. 根据需要定义数据结构,包括嵌套结构.
  2. 为主结构实现 PropertyLoadSaver 接口的 Load 和 Save 方法。这些方法将负责序列化和反序列化嵌套结构。
  3. 使用 Key 对象上的 AddPropertyLoadSaver 方法为主结构注册 PropertyLoadSaver 实现。

示例:

<code class="go">type Post struct {
    Field1 string
    Field2 string
    User   User
}

type User struct {
    UserField1 string
    UserField2 string
}

func (p Post) Load(ps []Property) error {
    for _, prop := range ps {
        switch prop.Name {
        case "Field1":
            p.Field1 = prop.Value.(string)
        case "Field2":
            p.Field2 = prop.Value.(string)
        case "User":
            if err := prop.Load(&p.User); err != nil {
                return err
            }
        }
    }

    return nil
}

func (p Post) Save() ([]Property, error) {
    props := []Property{
        {Name: "Field1", Value: p.Field1},
        {Name: "Field2", Value: p.Field2},
    }

    pLoad, err := appengine.Datastore().SaveStruct(p.User)
    if err != nil {
        return nil, err
    }

    props = append(props, pLoad...)

    return props, nil
}

// Usage
key := datastore.NewKey("Post", "someID", nil)

_, err := datastore.Put(ctx, key, &post)</code>

此实现允许您以结构化方式存储和检索嵌套结构,同时仍然受益于 Datastore 的过滤和查询功能。

以上是如何使用 Go 处理 Google App Engine (GAE) 数据存储区中的嵌套结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn