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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-21 07:43:10231ブラウズ

How to Implement Dynamic Properties in the Go App Engine Datastore?

Go App Engine データストアの動的プロパティ

Python の App Engine とは異なり、Go はすぐに使えるメカニズムを提供しません動的プロパティを持つエンティティを作成する場合、実行時に属性を割り当てることができます。ただし、PropertyLoadSaver インターフェイスを使用すると、同様の機能を実装できます。

動的プロパティに PropertyList を使用する

Go の App Engine プラットフォームは、PropertyList タイプを提供します。 PropertyLoadSaver インターフェイスを使用すると、保存時にプロパティを動的に構築できます。次の例を考えてみましょう。

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

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &props)
    if err != nil {
        // Handle error
    }

    // ...
}

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

動的プロパティのカスタム タイプ

場合によっては、PropertyLoadSaver を実装する方が望ましい場合があります。 PropertyList を使用するのではなく、カスタム タイプのインターフェイスを使用します。たとえば、マップ タイプに実装できます:

package main

import (
    "context"

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

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() ([]datastore.Property, error) {
    var props []datastore.Property
    for k, v := range *d {
        props = append(props, datastore.Property{Name: k, Value: v})
    }
    return props, nil
}

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

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

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &d)
    if err != nil {
        // Handle error
    }

    // ...
}

このカスタム タイプでは、Go の他のマップと同様に動的プロパティを使用できますが、データストアに保存したり、データストアから取得したりできます。

d["active"] = true
datastore.Put(ctx, key, &d)

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

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