Dynamische Eigenschaften im Go App Engine-Datenspeicher
Im Gegensatz zur App Engine von Python bietet Go keinen sofort einsatzbereiten Mechanismus zum Erstellen von Entitäten mit dynamischen Eigenschaften, denen zur Laufzeit Attribute zugewiesen werden können. Mit der PropertyLoadSaver-Schnittstelle ist es jedoch möglich, ähnliche Funktionen zu implementieren.
PropertyList für dynamische Eigenschaften verwenden
Die App Engine-Plattform von Go stellt den PropertyList-Typ bereit, der die implementiert PropertyLoadSaver-Schnittstelle und ermöglicht es Ihnen, Eigenschaften dynamisch und zeitsparend zu erstellen. Betrachten Sie das folgende Beispiel:
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@example.com"}, } k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &props) if err != nil { // Handle error } // ... }
In diesem Beispiel erstellen wir eine Entität namens „DynEntity“ mit zwei dynamischen Eigenschaften, „time“ und „email“.
Erstellen einer Benutzerdefinierter Typ für dynamische Eigenschaften
In manchen Fällen ist es möglicherweise vorzuziehen, die PropertyLoadSaver-Schnittstelle auf einem benutzerdefinierten Typ zu implementieren, anstatt sie zu verwenden PropertyList. Sie könnten es beispielsweise auf einem Kartentyp implementieren:
package main import ( "context" "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() ([]datastore.Property, error) { var props []datastore.Property for k, v := range *d { props = append(props, datastore.Property{Name: k, Value: v}) } return props, nil } func main() { ctx := context.Background() d := DynEnt{"email": "example@example.com", "time": time.Now()} k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &d) if err != nil { // Handle error } // ... }
Mit diesem benutzerdefinierten Typ können Sie dynamische Eigenschaften wie jede andere Karte in Go verwenden, sie können jedoch im Datenspeicher gespeichert und abgerufen werden:
d["active"] = true datastore.Put(ctx, key, &d)
Das obige ist der detaillierte Inhalt vonWie implementiert man dynamische Eigenschaften im Go App Engine-Datenspeicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!