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.
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.
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."
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!