Im Google App Engine-Datenspeicher können Sie auf Szenarien stoßen, in denen Sie Eigenschaften für Entitäten dynamisch definieren müssen. In diesem Artikel wird eine Technik untersucht, die dem Expando-Modell von Python ähnelt, um eine dynamische Eigenschaftenverwaltung in Go zu erreichen.
Der Schlüssel zum Erstellen dynamischer Eigenschaften liegt in der PropertyLoadSaver-Schnittstelle. Durch die Implementierung dieser Schnittstelle können Sie die Eigenschaften einer Entität dynamisch und zeitsparend erstellen.
Praktischerweise stellt die Go AppEngine-Plattform den PropertyList-Typ bereit, der ein Teil von Property-Objekten ist und implementiert auch PropertyLoadSaver. Um ein Expando-Modell in Go zu erstellen, verwenden Sie einfach den Typ PropertyList. Sie können ihm die gewünschten Eigenschaften hinzufügen und diese werden als Teil der Entität gespeichert.
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) }
In diesem Beispiel wird eine Entität namens „DynEntity“ mit zwei dynamischen Eigenschaften gespeichert: „time“ und „email.“
Sie können die PropertyLoadSaver-Schnittstelle auch mit einem benutzerdefinierten Typ implementieren, beispielsweise einer Karte. Der folgende Codeausschnitt zeigt, wie ein DynEnt-Typ erstellt wird, der eine Karte umschließt:
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 }
Dieser benutzerdefinierte Typ kann zum dynamischen Laden und Speichern von Entitäten verwendet werden:
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)
Dieser Ansatz bietet eine flexible Möglichkeit, dynamische Eigenschaften zu Entitäten im Google App Engine-Datenspeicher hinzuzufügen.
Das obige ist der detaillierte Inhalt vonWie implementiert man dynamische Eigenschaften im Go Datastore von Google App Engine?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!