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

Comment implémenter des propriétés dynamiques dans la banque de données Google App Engine de Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-23 22:02:11416parcourir

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

Obtention de propriétés dynamiques dans Go sur Google App Engine Datastore

Dans App Engine de Python, le modèle Expando offre la commodité d'attribuer des propriétés dynamiques à des entités sans déclaration préalable. Comment pouvons-nous reproduire cette fonctionnalité dans Go ?

Implémentation des propriétés dynamiques

La clé pour obtenir des propriétés dynamiques dans Go est l'interface PropertyLoadSaver. Il permet aux entités de construire des propriétés de manière dynamique avant qu'elles ne soient enregistrées.

Heureusement, la plateforme AppEngine fournit le type PropertyList, qui implémente l'interface PropertyLoadSaver. À l'aide de PropertyList, vous pouvez facilement ajouter des propriétés dynamiques en les ajoutant simplement à la liste.

Enregistrement d'une entité avec des propriétés dynamiques

Prenons un exemple :

import (
    "context"
    "time"

    datastore "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@domain.com"},
    }

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

Ce code crée une entité nommée "DynEntity" avec deux propriétés dynamiques : "time" et "email".

Utilisation un type personnalisé pour les entités dynamiques

Si vous avez besoin de plus de contrôle sur les entités dynamiques, vous pouvez implémenter l'interface PropertyLoadSaver sur un type personnalisé. Par exemple, définissons un type DynEnt personnalisé qui enveloppe une carte :

type DynEnt map[string]interface{}

func (d *DynEnt) Load(props []datastore.Property) error {
    // ... Your implementation
}

func (d *DynEnt) Save() (props []datastore.Property, err error) {
    // ... Your implementation
}

Maintenant, vous pouvez utiliser DynEnt comme suit :

import (
    "context"
    "time"

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

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

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

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

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