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

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

Mary-Kate Olsen
Freigeben: 2024-11-26 05:57:10
Original
704 Leute haben es durchsucht

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

Dynamische Eigenschaften zu Entitäten in Go hinzufügen

Im Google App Engine-Datenspeicher können Sie auf Szenarien stoßen, in denen Sie Eigenschaften für Entitäten dynamisch definieren müssen. In diesem Artikel wird eine Technik untersucht, die dem Expando-Modell von Python ähnelt, um eine dynamische Eigenschaftenverwaltung in Go zu erreichen.

Property Load Saver-Schnittstelle

Der Schlüssel zum Erstellen dynamischer Eigenschaften liegt in der PropertyLoadSaver-Schnittstelle. Durch die Implementierung dieser Schnittstelle können Sie die Eigenschaften einer Entität dynamisch und zeitsparend erstellen.

PropertyList-Typ

Praktischerweise stellt die Go AppEngine-Plattform den PropertyList-Typ bereit, der ein Teil von Property-Objekten ist und implementiert auch PropertyLoadSaver. Um ein Expando-Modell in Go zu erstellen, verwenden Sie einfach den Typ PropertyList. Sie können ihm die gewünschten Eigenschaften hinzufügen und diese werden als Teil der Entität gespeichert.

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@email.com"},
    }

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &props)
    if err != nil {
        // Handle error
    }

    c.Infof("%v", key)
}
Nach dem Login kopieren

In diesem Beispiel wird eine Entität namens „DynEntity“ mit zwei dynamischen Eigenschaften gespeichert: „time“ und „email.“

Native Kartenimplementierung

Sie können die PropertyLoadSaver-Schnittstelle auch mit einem benutzerdefinierten Typ implementieren, beispielsweise einer Karte. Der folgende Codeausschnitt zeigt, wie ein DynEnt-Typ erstellt wird, der eine Karte umschließt:

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() (props []datastore.Property, err error) {
    for k, v := range *d {
        props = append(props, datastore.Property{Name: k, Value: v})
    }
    return
}
Nach dem Login kopieren

Dieser benutzerdefinierte Typ kann zum dynamischen Laden und Speichern von Entitäten verwendet werden:

d := DynEnt{"email": "example@email.com", "time": time.Now()}

k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
key, err := datastore.Put(ctx, k, &d)
if err != nil {
    // Handle error
}

c.Infof("%v", key)
Nach dem Login kopieren

Dieser Ansatz bietet eine flexible Möglichkeit, dynamische Eigenschaften zu Entitäten im Google App Engine-Datenspeicher hinzuzufügen.

Das obige ist der detaillierte Inhalt vonWie implementiert man dynamische Eigenschaften im Go Datastore von Google App Engine?. 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