首页 > 后端开发 > Golang > 如何在 Google App Engine 的 Go 数据存储中实现动态属性?

如何在 Google App Engine 的 Go 数据存储中实现动态属性?

Mary-Kate Olsen
发布: 2024-11-26 05:57:10
原创
735 人浏览过

How to Implement Dynamic Properties in Google App Engine's Go Datastore?

在 Go 中向实体添加动态属性

在 Google App Engine 数据存储区中,您可能会遇到需要动态定义实体属性的情况。本文探讨了一种类似于 Python Expando Model 的技术来实现 Go 中的动态属性处理。

Property Load Saver 接口

创建动态属性的关键在于 PropertyLoadSaver 接口。通过实现此接口,您可以在保存时动态构造实体的属性。

PropertyList 类型

方便的是,Go AppEngine 平台提供了 PropertyList 类型,它是 Property 对象的切片并且还实现了PropertyLoadSaver。要在 Go 中创建 Expando 模型,只需使用 PropertyList 类型。您可以向其中添加所需的属性,这些属性将保存为实体的一部分。

package main

import (
    "context"
    "time"

    "google.golang.org/appengine/datastore"
)

func main() {
    ctx := context.Background()

    props := datastore.PropertyList{
        datastore.Property{Name: "time", Value: time.Now()},
        datastore.Property{Name: "email", Value: "example@email.com"},
    }

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &props)
    if err != nil {
        // Handle error
    }

    c.Infof("%v", key)
}
登录后复制

在此示例中,名为“DynEntity”的实体保存有两个动态属性:“时间”和“时间” “电子邮件。”

原生地图实现

您还可以使用自定义类型(例如地图)实现 PropertyLoadSaver 接口。以下代码片段演示了如何创建包装地图的 DynEnt 类型:

type DynEnt map[string]interface{}

func (d *DynEnt) Load(props []datastore.Property) error {
    for _, p := range props {
        (*d)[p.Name] = p.Value
    }
    return nil
}

func (d *DynEnt) Save() (props []datastore.Property, err error) {
    for k, v := range *d {
        props = append(props, datastore.Property{Name: k, Value: v})
    }
    return
}
登录后复制

此自定义类型可用于动态加载和保存实体:

d := DynEnt{"email": "example@email.com", "time": time.Now()}

k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
key, err := datastore.Put(ctx, k, &d)
if err != nil {
    // Handle error
}

c.Infof("%v", key)
登录后复制

此方法提供一种向 Google App Engine 数据存储区中的实体添加动态属性的灵活方法。

以上是如何在 Google App Engine 的 Go 数据存储中实现动态属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板