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

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

Susan Sarandon
Freigeben: 2024-11-21 07:43:10
Original
281 Leute haben es durchsucht

How to Implement Dynamic Properties in the Go App Engine Datastore?

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
    }

    // ...
}
Nach dem Login kopieren

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
    }

    // ...
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage