Maison  >  Article  >  développement back-end  >  Comment puis-je travailler avec des structures imbriquées dans la banque de données Google App Engine (GAE) à l'aide de Go ?

Comment puis-je travailler avec des structures imbriquées dans la banque de données Google App Engine (GAE) à l'aide de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 02:20:03260parcourir

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

Structs imbriqués dans la banque de données GAE avec Go

Question :

Comment puis-je utiliser des structures imbriquées avec Google App Engine (GAE) lorsque vous travaillez avec Go ?

Réponse :

L'API Datastore dans Go ne prend pas directement en charge les structures imbriquées. Cependant, une solution consiste à utiliser l'interface PropertyLoadSaver fournie par l'API.

Mise en œuvre :

  1. Définissez vos structures de données comme vous le souhaitez, y compris les structures imbriquées .
  2. Implémentez les méthodes Load et Save de l'interface PropertyLoadSaver pour votre structure principale. Ces méthodes seront responsables de la sérialisation et de la désérialisation des structures imbriquées.
  3. Utilisez la méthode AddPropertyLoadSaver sur l'objet Key pour enregistrer l'implémentation de PropertyLoadSaver pour votre structure principale.

Exemple :

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

Cette implémentation vous permet de stocker et de récupérer des structures imbriquées de manière structurée, tout en bénéficiant des capacités de filtrage et de requête de Datastore.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn