La banque de données Google App Engine fournit une solution de stockage de données puissante pour les applications Web, offrant flexibilité et évolutivité. Parfois, il est nécessaire de stocker des données avec des propriétés dynamiques, c'est-à-dire des propriétés qui ne sont pas déclarées à l'avance. Ceci peut être réalisé dans Go en tirant parti de l'interface PropertyLoadSaver de Google App Engine.
L'interface PropertyLoadSaver vous permet de définir la manière dont les propriétés d'une entité doivent être chargées et enregistrées dans la banque de données. En implémentant cette interface, vous prenez le contrôle de la gestion dynamique des propriétés.
La plate-forme Go App Engine fournit un type PropertyList qui implémente l'interface PropertyLoadSaver. PropertyList est essentiellement une tranche de propriétés, vous permettant d'ajouter et de supprimer des propriétés de manière dynamique.
Pour créer une entité avec des propriétés dynamiques à l'aide de PropertyList, suivez ces étapes :
import "google.golang.org/appengine/datastore" // Create a PropertyList to hold the dynamic properties. props := datastore.PropertyList{ datastore.Property{Name: "time", Value: time.Now()}, datastore.Property{Name: "email", Value: "[email protected]"}, } // Create an incomplete key for the new entity. k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) // Save the entity using the PropertyList. key, err := datastore.Put(ctx, k, &props)
Cet extrait de code crée une entité avec le type "DynEntity" et deux propriétés dynamiques : "time" et "email". La PropertyList est enregistrée en tant que valeur de l'entité.
Vous pouvez également implémenter votre propre PropertyLoadSaver si nécessaire. Voici un exemple utilisant un type personnalisé appelé « DynEnt » :
import "google.golang.org/appengine/datastore" 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) error { for k, v := range *d { props = append(props, datastore.Property{Name: k, Value: v}) } return err }
Ce type DynEnt peut ensuite être utilisé pour stocker des entités avec des propriétés dynamiques, comme indiqué ci-dessous :
import "google.golang.org/appengine/datastore" // Create a DynEnt with dynamic properties. d := DynEnt{"email": "[email protected]", "time": time.Now()} // Create an incomplete key for the new entity. k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) // Save the entity using the DynEnt. key, err := datastore.Put(ctx, k, &d)
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!