Maison  >  Article  >  développement back-end  >  Comment implémenter des propriétés dynamiques dans le Go Datastore de Google App Engine ?

Comment implémenter des propriétés dynamiques dans le Go Datastore de Google App Engine ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-26 05:57:10683parcourir

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

Ajout de propriétés dynamiques aux entités dans Go

Dans la banque de données Google App Engine, vous pouvez rencontrer des scénarios dans lesquels vous devez définir dynamiquement des propriétés pour des entités. Cet article explore une technique similaire au modèle Expando de Python pour réaliser une gestion dynamique des propriétés dans Go.

Interface Property Load Saver

La clé de la création de propriétés dynamiques réside dans l'interface PropertyLoadSaver. En implémentant cette interface, vous pouvez construire dynamiquement les propriétés d'une entité au moment de la sauvegarde.

Type PropertyList

De manière pratique, la plate-forme Go AppEngine fournit le type PropertyList, qui est une tranche d'objets Property. et implémente également PropertyLoadSaver. Pour créer un modèle Expando dans Go, utilisez simplement le type PropertyList. Vous pouvez y ajouter les propriétés souhaitées, et celles-ci seront enregistrées dans le cadre de l'entité.

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

Dans cet exemple, une entité nommée "DynEntity" est enregistrée avec deux propriétés dynamiques : "time" et "email."

Implémentation de carte native

Vous pouvez également implémenter l'interface PropertyLoadSaver avec un type personnalisé, tel qu'une carte. L'extrait de code suivant montre comment créer un type DynEnt qui encapsule une carte :

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
}

Ce type personnalisé peut être utilisé pour charger et enregistrer des entités de manière dynamique :

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)

Cette approche fournit un moyen flexible d'ajouter des propriétés dynamiques aux entités dans la banque de données Google App Engine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn