ホームページ  >  記事  >  バックエンド開発  >  Go を使用して Google App Engine (GAE) データストアでネストされた構造体を操作するにはどうすればよいですか?

Go を使用して Google App Engine (GAE) データストアでネストされた構造体を操作するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 02:20:03260ブラウズ

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

Go を使用した GAE データストアのネストされた構造体

質問:

Google App Engine でネストされた構造体を使用するにはどうすればよいですかGo を使用する場合、(GAE) データストアを使用しますか?

回答:

Go のデータストア API は、ネストされた構造体を直接サポートしません。ただし、解決策は、API によって提供される PropertyLoadSaver インターフェイスを利用することです。

実装:

  1. ネストされた構造体を含め、必要に応じてデータ構造を定義します。 .
  2. メイン構造体の PropertyLoadSaver インターフェイスの Load メソッドと Save メソッドを実装します。これらのメソッドは、ネストされた構造体のシリアル化とシリアル化解除を行います。
  3. Key オブジェクトの AddPropertyLoadSaver メソッドを使用して、メイン構造体の PropertyLoadSaver 実装を登録します。

例:

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

この実装により、データストアのフィルタリング機能とクエリ機能を活用しながら、構造化された方法でネストされた構造体を保存および取得できます。

以上がGo を使用して Google App Engine (GAE) データストアでネストされた構造体を操作するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。