6

Go を使用して、ネストされた構造体を GAE データストアで動作させる方法を見つけようとしています。データストアがネストされた構造体を具体的にサポートしていないことは知っています。投稿が JSON としてユーザーに送信されるときに、投稿に合わせてユーザー情報を取得する簡単な方法を見つける必要があります。

私が考えたことの 1 つは、ユーザー用に 2 つのフィールドを配置することでした。1 つはユーザーを参照する ID/キー用で、もう 1 つは投稿がデータストアからロードされるときにそこに追加されるユーザー型構造体用です。余分なフィールドはばかげているように見えるので、これに対するより良い解決策があることを願っています。

POST と USER の 2 つのエンティティ タイプまたは構造体があります。

投稿には、投稿を行ったユーザーに関する情報を含める必要があります。

ユーザー向けに出力する JSON の構造は次のとおりです。

  • 役職
    • フィールド1
    • フィールド2
    • ユーザー
      • ユーザーフィールド1
      • user_Field2
4

2 に答える 2

9

GoのappengineデータストアAPIは、この種のもののためのPropertyLoadSaverインターフェースを提供します:https ://developers.google.com/appengine/docs/go/datastore/reference#PropertyLoadSaver

構造体を必要に応じて構造化し、そのインターフェイスのLoadメソッドとSaveメソッドを実装して、正しく入力します。これは、シリアル化コードを自分で作成することを意味しますが、データの構造を完全に自由にすることができます。

これにより、フィールドをフィルタリングし、ネストされた構造体を使用できます。

于 2013-01-14T04:06:08.193 に答える
0

Pythonランタイムには、このようなネストされた構造をサポートするndbライブラリがあります。Goはそうではないので、2つの解決策を考えることができます。

  1. POSTの種類には、必要なフィールドでUSERの種類を参照する、キーであるユーザーフィールドがあります。2回のフェッチとラウンドトリップが必要です。
  2. BLOBであるPOST種類のユーザーフィールドを作成します。blobは、goで[逆]シリアル化される文字列です。つまり、ユーザーデータを検索したりフィルタリングしたりすることはできませんが、すべてを1つのエンティティに保存することもできます。

アプリのニーズに基づいてこれらを使用する必要があります。ユーザーが本物である必要がある場合は、1を使用します。ユーザーが操作する必要のあるオブジェクトではない場合(つまり、表示するデータのみ)、2を使用できます。

于 2013-01-13T22:46:12.467 に答える