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