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

jshen:

PythonがApp EngineでサポートするExpandoモデルのようなことをしたいのですが

事前にプロパティを宣言したくない場合があります。特別なモデルサブクラスであるExpandoは、エンティティの動作を変更して、割り当てられた属性が(アンダースコアで始まらない限り)データストアに保存されるようにします。

Goでこれを行うにはどうすればよいですか?

icza:

事前に注意してください:

2つのAPIがあります。インポートパスappengine/datastore持つものは、引数としてチャネルを使用します。インポートパスgoogle.golang.org/appengine/datastore持つもう1つはスライス使用します。以下の例をあなたのケースに合わせて調整してください。詳細については、この質問を参照してください:Golang appengineを正しくインポートするにはどうすればよいですか?


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

また、これを自分で行う必要がないように、Go AppEngineプラットフォームは、PropertyList基本的にプロパティのリスト(スライス)であるタイプを提供し、Propertyそれも実装しPropertyLoadSaverます。

したがって、GoのExpandoモデルはPropertyListです。エンティティに必要なプロパティを追加し、このPropertyListを保存するだけです。

次に例を示します。

c := appengine.NewContext(r)

props := datastore.PropertyList{
    datastore.Property{Name: "time", Value: time.Now()},
    datastore.Property{Name: "email", Value: "[email protected]"},
}

k := datastore.NewIncompleteKey(c, "DynEntity", nil)
key, err := datastore.Put(c, k, &props)
c.Infof("%v %v", key, err)

この例では、およびの"DynEntity"2つの動的プロパティで名前が付けられたエンティティを保存します"time""email"

通りPropertyListのタイプがスライスである、あなたはまた、組み込みの使用することができますappend()あなたも初期化することができるように、それにプロパティを追加する機能をprops次のように:

var props datastore.PropertyList
props = append(props, datastore.Property{Name:"time", Value: time.Now()})
props = append(props, datastore.Property{Name:"email", Value: "[email protected]"})

map動的エンティティに変える

PropertyLoadSaverインターフェイスは、我々はそれを自分自身を実装することができ、複雑ではありません。次の例では、シンプルなカスタムタイプに実装しますmap

type DynEnt map[string]interface{}

func (d *DynEnt) Load(props []datastore.Property) error {
    // Note: you might want to clear current values from the map or create a new map
    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
}

以下は、スライスの代わりにチャネルを使用した「古い」インターフェースでの実装の様子です。

type DynEnt map[string]interface{}

func (d *DynEnt) Load(ch <-chan datastore.Property) error {
    // Note: you might want to clear current values from the map or create a new map
    for p := range ch { // Read until channel is closed
        (*d)[p.Name] = p.Value
    }
    return nil
}

func (d *DynEnt) Save(ch chan<- datastore.Property) error {
    defer close(ch) // Channel must be closed
    for k, v := range *d {
        ch <- datastore.Property{Name: k, Value: v}
    }
    return nil
}

今、我々は使用することができるDynEntだけで行くの他のマップなどの種類を、その実装しているのでPropertyLoadSaver、それはエンティティとして保存することができます(と任意のエンティティがそれにロードすることができます):

c := appengine.NewContext(r)

d := DynEnt{"email": "[email protected]", "time": time.Now()}

k := datastore.NewIncompleteKey(c, "DynEntity", nil)
key, err := datastore.Put(c, k, &d)
c.Infof("%v %v", key, err)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaのGoogle App Engineデータストアでリストプロパティをどのように使用しますか?

分類Dev

GoのGoogle App Engineでは、プロパティに複数のタイプの値を含めるにはどうすればよいですか?

分類Dev

Google App Engineでプロパティのプロパティをクエリするにはどうすればよいですか?

分類Dev

Google App Engineデータストアのレイテンシを削減するにはどうすればよいですか?

分類Dev

Google App Engineの単体テスト用にすでに一貫性のあるデータを設定するにはどうすればよいですか?

分類Dev

Google App Engineデータストアに保存されている設定エントリを更新するにはどうすればよいですか?

分類Dev

Google App Engineの既存のアプリに新しいサービスをデプロイするにはどうすればよいですか?

分類Dev

Google App Engine、クラウドストレージ、データストアを使用するアプリは中国でどのように動作しますか?

分類Dev

Google App EngineでタスクキューAPIを使用するにはどうすればよいですか?

分類Dev

Java Google App Engineのデプロイをスピードアップするにはどうすればよいですか?

分類Dev

Google App EngineにPhpRedisをインストール/使用するにはどうすればよいですか?

分類Dev

Google App Scriptのカスタムダイアログウィンドウからデータを取得するにはどうすればよいですか?

分類Dev

Google App EngineでSeleniumテストを実行するにはどうすればよいですか?

分類Dev

Google App Engine StandardのCIアプリケーションのサブディレクトリからカスタムPHPアプリケーションを実行するにはどうすればよいですか?

分類Dev

Google App Engineにアプリケーションを再デプロイするにはどうすればよいですか?

分類Dev

Google App Engine Javaのログをカスタマイズするにはどうすればよいですか?

分類Dev

Google App Engine Javaのログをカスタマイズするにはどうすればよいですか?

分類Dev

Google App EngineプロジェクトでYAMLファイルの相対パスを参照するにはどうすればよいですか?

分類Dev

Goのアップデートでこれを実行するにはどうすればよいですか?(Google App Engine)

分類Dev

Java App Engineを使用して(画像)ファイルをGoogle Cloud Storageに適切にアップロードするにはどうすればよいですか?

分類Dev

Google App Engineサーブレットをデバッグするにはどうすればよいですか?

分類Dev

Google Analytcs 2(App + Web)プロパティのiOSでgtagイベントロギングを模倣するにはどうすればよいですか?

分類Dev

Google App Engine pythonプロジェクトにInfluxDBをインストールするにはどうすればよいですか?

分類Dev

EclipseでGoogle App Engine Javaサーバーを再起動するにはどうすればよいですか?

分類Dev

Google App Scriptのプロパティサービスのスクリプトプロパティに2D配列を保存するにはどうすればよいですか?

分類Dev

Google App EngineでサードパーティのPythonライブラリを管理するにはどうすればよいですか?(virtualenv?pip?)

分類Dev

Google App Engineでホストされているウェブサイトのクローンを作成するにはどうすればよいですか?

分類Dev

Google App EngineのURLからアプリIDを削除するにはどうすればよいですか?

分類Dev

AJAXアプリケーションをクロール可能にしますか?Google App EngineでシンプルなWebサービスを作成してHTMLスナップショットを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    JavaのGoogle App Engineデータストアでリストプロパティをどのように使用しますか?

  2. 2

    GoのGoogle App Engineでは、プロパティに複数のタイプの値を含めるにはどうすればよいですか?

  3. 3

    Google App Engineでプロパティのプロパティをクエリするにはどうすればよいですか?

  4. 4

    Google App Engineデータストアのレイテンシを削減するにはどうすればよいですか?

  5. 5

    Google App Engineの単体テスト用にすでに一貫性のあるデータを設定するにはどうすればよいですか?

  6. 6

    Google App Engineデータストアに保存されている設定エントリを更新するにはどうすればよいですか?

  7. 7

    Google App Engineの既存のアプリに新しいサービスをデプロイするにはどうすればよいですか?

  8. 8

    Google App Engine、クラウドストレージ、データストアを使用するアプリは中国でどのように動作しますか?

  9. 9

    Google App EngineでタスクキューAPIを使用するにはどうすればよいですか?

  10. 10

    Java Google App Engineのデプロイをスピードアップするにはどうすればよいですか?

  11. 11

    Google App EngineにPhpRedisをインストール/使用するにはどうすればよいですか?

  12. 12

    Google App Scriptのカスタムダイアログウィンドウからデータを取得するにはどうすればよいですか?

  13. 13

    Google App EngineでSeleniumテストを実行するにはどうすればよいですか?

  14. 14

    Google App Engine StandardのCIアプリケーションのサブディレクトリからカスタムPHPアプリケーションを実行するにはどうすればよいですか?

  15. 15

    Google App Engineにアプリケーションを再デプロイするにはどうすればよいですか?

  16. 16

    Google App Engine Javaのログをカスタマイズするにはどうすればよいですか?

  17. 17

    Google App Engine Javaのログをカスタマイズするにはどうすればよいですか?

  18. 18

    Google App EngineプロジェクトでYAMLファイルの相対パスを参照するにはどうすればよいですか?

  19. 19

    Goのアップデートでこれを実行するにはどうすればよいですか?(Google App Engine)

  20. 20

    Java App Engineを使用して(画像)ファイルをGoogle Cloud Storageに適切にアップロードするにはどうすればよいですか?

  21. 21

    Google App Engineサーブレットをデバッグするにはどうすればよいですか?

  22. 22

    Google Analytcs 2(App + Web)プロパティのiOSでgtagイベントロギングを模倣するにはどうすればよいですか?

  23. 23

    Google App Engine pythonプロジェクトにInfluxDBをインストールするにはどうすればよいですか?

  24. 24

    EclipseでGoogle App Engine Javaサーバーを再起動するにはどうすればよいですか?

  25. 25

    Google App Scriptのプロパティサービスのスクリプトプロパティに2D配列を保存するにはどうすればよいですか?

  26. 26

    Google App EngineでサードパーティのPythonライブラリを管理するにはどうすればよいですか?(virtualenv?pip?)

  27. 27

    Google App Engineでホストされているウェブサイトのクローンを作成するにはどうすればよいですか?

  28. 28

    Google App EngineのURLからアプリIDを削除するにはどうすればよいですか?

  29. 29

    AJAXアプリケーションをクロール可能にしますか?Google App EngineでシンプルなWebサービスを作成してHTMLスナップショットを作成するにはどうすればよいですか?

ホットタグ

アーカイブ