ホームページ > バックエンド開発 > Golang > Google App Engine の Go データストアに動的プロパティを実装するにはどうすればよいですか?

Google App Engine の Go データストアに動的プロパティを実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-26 05:57:10
オリジナル
728 人が閲覧しました

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

Go でエンティティに動的プロパティを追加する

Google App Engine データストアでは、エンティティのプロパティを動的に定義する必要があるシナリオが発生する場合があります。この記事では、Go で動的プロパティ処理を実現するための Python の Expando モデルに似た手法について説明します。

プロパティ ロード セーバー インターフェイス

動的プロパティを作成する鍵は、PropertyLoadSaver インターフェイスにあります。このインターフェイスを実装すると、保存時にエンティティのプロパティを動的に構築できます。

PropertyList タイプ

便利なことに、Go AppEngine プラットフォームでは、Property オブジェクトのスライスである PropertyList タイプが提供されます。また、PropertyLoadSaver も実装します。 Go で Expando モデルを作成するには、単に PropertyList タイプを使用します。必要なプロパティを追加すると、これらはエンティティの一部として保存されます。

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)
}
ログイン後にコピー

この例では、「DynEntity」という名前のエンティティが、「time」と「time」という 2 つの動的プロパティとともに保存されます。 "email."

ネイティブ マップの実装

次のようなカスタム タイプを使用して PropertyLoadSaver インターフェイスを実装することもできます。地図。次のコード スニペットは、マップをラップする DynEnt タイプを作成する方法を示しています。

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
}
ログイン後にコピー

このカスタム タイプは、エンティティを動的にロードおよび保存するために使用できます。

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)
ログイン後にコピー

このアプローチでは、次のことが可能になります。 Google App Engine データストア内のエンティティに動的プロパティを追加する柔軟な方法。

以上がGoogle App Engine の Go データストアに動的プロパティを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート