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

Barbara Streisand
リリース: 2024-11-23 22:02:11
オリジナル
389 人が閲覧しました

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

Google App Engine データストア上の Go で動的プロパティを実現する

Python の App Engine では、Expando モデルを使用すると、事前宣言なしで動的プロパティをエンティティに割り当てることができます。この機能を Go でどのように複製できますか?

動的プロパティの実装

Go で動的プロパティを実現するための鍵は、PropertyLoadSaver インターフェイスです。これにより、エンティティは保存前にプロパティを動的に構築できるようになります。

幸いなことに、AppEngine プラットフォームは、PropertyLoadSaver インターフェイスを実装する PropertyList タイプを提供します。 PropertyList を使用すると、動的プロパティをリストに追加するだけで簡単に追加できます。

動的プロパティを含むエンティティの保存

例を詳しく見てみましょう:

import (
    "context"
    "time"

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

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &props)
    if err != nil {
        // Handle the error
    }
    // ...
}
ログイン後にコピー

このコードは、「time」と「time」という 2 つの動的プロパティを持つ「DynEntity」という名前のエンティティを作成します。 "email."

動的エンティティのカスタム タイプの使用

動的エンティティをより詳細に制御する必要がある場合は、カスタム タイプに PropertyLoadSaver インターフェイスを実装できます。たとえば、マップをラップするカスタム DynEnt タイプを定義してみましょう:

type DynEnt map[string]interface{}

func (d *DynEnt) Load(props []datastore.Property) error {
    // ... Your implementation
}

func (d *DynEnt) Save() (props []datastore.Property, err error) {
    // ... Your implementation
}
ログイン後にコピー

これで、DynEnt を次のように使用できるようになります:

import (
    "context"
    "time"

    datastore "google.golang.org/appengine/datastore"
)

func main() {
    ctx := context.Background()

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

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &d)
    if err != nil {
        // Handle the error
    }
    // ...
}
ログイン後にコピー

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

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