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
Susan SarandonOriginal
2024-11-21 07:43:10294Durchsuche

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
    }

    // ...
}

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!

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