Dans App Engine de Python, le modèle Expando permet l'attribution dynamique d'attributs à des entités sans déclaration préalable. Cet article explique comment obtenir des fonctionnalités similaires dans Go à l'aide du magasin de données Google App Engine.
La clé pour définir des entités dynamiques dans Go est l'interface PropertyLoadSaver. En implémentant cette interface, vous obtenez la possibilité de construire dynamiquement les propriétés d'une entité en un rien de temps.
La plateforme Go App Engine propose le type PropertyList, qui est une liste d'instances de Property et implémente l'interface PropertyLoadSaver. En tirant parti de PropertyList, vous pouvez créer des entités dynamiques sans implémenter l'interface vous-même.
props := datastore.PropertyList{ {Name: "time", Value: time.Now()}, {Name: "email", Value: "johndoe@example.com"}, }
Pour enregistrer cette liste en tant qu'entité, vous pouvez utiliser :
key, err := datastore.Put(c, k, &props)
Pour plus de flexibilité, vous pouvez implémenter l'interface PropertyLoadSaver sur vos propres types personnalisés, tels que maps.
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 }
Avec cette implémentation personnalisée, vous pouvez désormais charger et enregistrer facilement des entités dynamiques :
d := DynEnt{"email": "johndoe@example.com", "time": time.Now()} key, err := datastore.Put(c, k, &d)
Cette approche vous accorde un contrôle total sur les définitions de propriétés de vos entités dynamiques. .
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!