「データストア: ネストされた構造体を平坦化すると、スライスのスライスが発生する」という Go データストアのエラーの処理方法

DDD
リリース: 2024-10-25 16:35:51
オリジナル
853 人が閲覧しました

How to Handle

Go データストアでのネストされたスライスの処理: エラーと解決策

Google AppEngine データストア エンティティを Go プロジェクトにロードしようとすると、開発者は次のような問題に遭遇する可能性があります。次のエラー: 「データストア: ネストされた構造体を平坦化すると、スライスのスライスが生成されます: フィールド 'メッセージ'」。このエラーは、Go モデル定義にスライスも含まれる構造体のスライスが含まれている場合に発生します。

この問題を解決するには、Go データストアが多層スライスをサポートしていないことを理解することが重要です。開発者には次のオプションがあります:

  1. 多層スライスの使用を避ける: Go モデル定義に、独自のスライスを持つ構造体のスライスが含まれていないことを確認します。最上位構造体の単一スライスとして保持するか、内部にスライスを含む最上位構造体を使用します。
  2. カスタム デシリアライザーを作成する: 上級ユーザー向け、カスタム デシリアライザーを作成します。オプションとして、エラーの原因となっている特定の構造を処理することもできます。ただし、このアプローチは多大な労力を必要とする可能性があり、すべてのケースに推奨されるわけではありません。
  3. データ構造を変更し、データを再構築する: 可能であれば、Python でデータ構造を変更し、データを再構築します。 Go データストアの要件を満たしています。これには、エラーの原因となるネストされたスライス構成を排除する方法でデータを整理することが含まれます。

例:

次のモデル定義を考えてみましょう。

Python:

<code class="python">class ModelB(ndb.Model):
    msg_id = ndb.StringProperty(indexed=False)
    ...

class ModelA(ndb.Model):
    ...
    messages = ndb.LocalStructuredProperty(ModelB, name='bm', repeated=True)</code>
ログイン後にコピー

Go:

<code class="go">type ModelB struct {
    MessageID string `datastore:"msg_id,noindex"`
    ...
}

type ModelA struct {
    ...
    Messages []ModelB `datastore:"bm,"`
}</code>
ログイン後にコピー

この場合、Go モデルが次のように定義しているため、エラーが発生します。 ModelB (ModelA.Messages) のスライス。ただし、ModelB 自体にはスライス (ModelB.MessageID) があります。この問題を解決するには、ModelA.Messages が ModelB のフラット スライスであることを確認するか、ネストされたスライスを避けるようにデータ構造を再設計します。

以上が「データストア: ネストされた構造体を平坦化すると、スライスのスライスが発生する」という Go データストアのエラーの処理方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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