Heim >Backend-Entwicklung >Golang >Wie arbeite ich mit Go mit verschachtelten Strukturen im Google App Engine (GAE)-Datenspeicher?

Wie arbeite ich mit Go mit verschachtelten Strukturen im Google App Engine (GAE)-Datenspeicher?

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 02:20:03324Durchsuche

How do I work with nested structs in the Google App Engine (GAE) Datastore using Go?

Verschachtelte Strukturen im GAE-Datenspeicher mit Go

Frage:

Wie kann ich verschachtelte Strukturen mit der Google App Engine verwenden? (GAE)-Datenspeicher beim Arbeiten mit Go?

Antwort:

Die Datastore-API in Go unterstützt verschachtelte Strukturen nicht direkt. Eine Lösung besteht jedoch darin, die von der API bereitgestellte PropertyLoadSaver-Schnittstelle zu verwenden.

Implementierung:

  1. Definieren Sie Ihre Datenstrukturen nach Ihren Wünschen, einschließlich der verschachtelten Strukturen .
  2. Implementieren Sie die Load- und Save-Methoden der PropertyLoadSaver-Schnittstelle für Ihre Hauptstruktur. Diese Methoden sind für die Serialisierung und Deserialisierung der verschachtelten Strukturen verantwortlich.
  3. Verwenden Sie die AddPropertyLoadSaver-Methode für das Key-Objekt, um die PropertyLoadSaver-Implementierung für Ihre Hauptstruktur zu registrieren.

Beispiel :

<code class="go">type Post struct {
    Field1 string
    Field2 string
    User   User
}

type User struct {
    UserField1 string
    UserField2 string
}

func (p Post) Load(ps []Property) error {
    for _, prop := range ps {
        switch prop.Name {
        case "Field1":
            p.Field1 = prop.Value.(string)
        case "Field2":
            p.Field2 = prop.Value.(string)
        case "User":
            if err := prop.Load(&p.User); err != nil {
                return err
            }
        }
    }

    return nil
}

func (p Post) Save() ([]Property, error) {
    props := []Property{
        {Name: "Field1", Value: p.Field1},
        {Name: "Field2", Value: p.Field2},
    }

    pLoad, err := appengine.Datastore().SaveStruct(p.User)
    if err != nil {
        return nil, err
    }

    props = append(props, pLoad...)

    return props, nil
}

// Usage
key := datastore.NewKey("Post", "someID", nil)

_, err := datastore.Put(ctx, key, &post)</code>

Mit dieser Implementierung können Sie verschachtelte Strukturen strukturiert speichern und abrufen und gleichzeitig von den Filter- und Abfragefunktionen von Datastore profitieren.

Das obige ist der detaillierte Inhalt vonWie arbeite ich mit Go mit verschachtelten Strukturen im Google App Engine (GAE)-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