Maison > développement back-end > Golang > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-23 22:02:11
original
389 Les gens l'ont consulté

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
    }
    // ...
}
Copier après la connexion

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
}
Copier après la connexion

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
    }
    // ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal