Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man dynamische Eigenschaften im Google App Engine-Datenspeicher von Go?

Wie implementiert man dynamische Eigenschaften im Google App Engine-Datenspeicher von Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-23 22:02:11396Durchsuche

How to Implement Dynamic Properties in Go's Google App Engine Datastore?

Erzielen dynamischer Eigenschaften in Go im Google App Engine-Datenspeicher

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?

Dynamische Eigenschaften implementieren

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.

Speichern einer Entität mit dynamischen Eigenschaften

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“.

Mit a Benutzerdefinierter Typ für dynamische Entitäten

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn