Heim > Artikel > Backend-Entwicklung > Wie implementiert man dynamische Eigenschaften im Google App Engine-Datenspeicher von Go?
In Pythons App Engine bietet das Expando-Modell den Komfort, Entitäten dynamische Eigenschaften ohne vorherige Deklaration zuzuweisen. Wie können wir diese Funktionalität in Go replizieren?
Der Schlüssel zum Erreichen dynamischer Eigenschaften in Go ist die PropertyLoadSaver-Schnittstelle. Es ermöglicht Entitäten, Eigenschaften dynamisch zu erstellen, bevor sie gespeichert werden.
Glücklicherweise stellt die AppEngine-Plattform den Typ PropertyList bereit, der die PropertyLoadSaver-Schnittstelle implementiert. Mit PropertyList können Sie mühelos dynamische Eigenschaften hinzufügen, indem Sie sie einfach zur Liste hinzufügen.
Lassen Sie uns auf ein Beispiel eingehen:
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 } // ... }
Dieser Code erstellt eine Entität namens „DynEntity“ mit zwei dynamischen Eigenschaften: „Zeit“ und „E-Mail“.
Wenn Sie mehr Kontrolle über dynamische Entitäten benötigen, können Sie die PropertyLoadSaver-Schnittstelle für einen benutzerdefinierten Typ implementieren. Definieren wir zum Beispiel einen benutzerdefinierten DynEnt-Typ, der eine Karte umschließt:
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 }
Jetzt können Sie DynEnt wie folgt verwenden:
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 } // ... }
Das obige ist der detaillierte Inhalt vonWie implementiert man dynamische Eigenschaften im Google App Engine-Datenspeicher von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!