Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mengendalikan \"datastore: meratakan struct bersarang membawa kepada sekeping hirisan\" Ralat dalam Go Datastore?

Cara Mengendalikan \"datastore: meratakan struct bersarang membawa kepada sekeping hirisan\" Ralat dalam Go Datastore?

DDD
DDDasal
2024-10-25 16:35:51768semak imbas

How to Handle

Mengendalikan Nested Slices dalam Go Datastore: Ralat dan Penyelesaian

Apabila cuba memuatkan entiti Google AppEngine datastore ke dalam projek Go, pembangun mungkin menghadapi ralat berikut: "simpan data: meratakan struct bersarang membawa kepada sekeping kepingan: medan 'Mesej'". Ralat ini timbul apabila definisi model Go menyertakan kepingan struct yang turut mengandungi kepingan.

Untuk menyelesaikan isu ini, adalah penting untuk memahami bahawa stor data Go tidak menyokong kepingan berbilang lapisan. Pembangun mempunyai pilihan berikut:

  1. Elakkan menggunakan kepingan berbilang lapisan: Pastikan definisi model Go tidak termasuk kepingan struct yang mempunyai kepingan sendiri. Sama ada simpannya sebagai hirisan tunggal struct peringkat atas atau gunakan struct peringkat atas dengan hirisan di dalamnya.
  2. Tulis deserializer tersuai: Untuk pengguna lanjutan, tulis deserializer tersuai untuk mengendalikan struktur khusus yang menyebabkan ralat boleh menjadi pilihan. Walau bagaimanapun, pendekatan ini mungkin memerlukan usaha yang ketara dan tidak disyorkan untuk semua kes.
  3. Ubah suai struktur data dan bina semula data: Jika boleh, ubah suai struktur data dalam Python dan bina semula data supaya ia memenuhi keperluan stor data Go. Ini melibatkan penyusunan data dengan cara yang menghapuskan konfigurasi kepingan bersarang yang menyebabkan ralat.

Contoh:

Pertimbangkan takrif model berikut:

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>

Dalam kes ini, ralat timbul kerana model Go mentakrifkan sekeping ModelB (ModelA.Messages). Walau bagaimanapun, ModelB sendiri mempunyai kepingan (ModelB.MessageID). Untuk menyelesaikan isu ini, sama ada pastikan ModelA.Messages ialah kepingan rata ModelB atau reka bentuk semula struktur data untuk mengelakkan kepingan bersarang.

Atas ialah kandungan terperinci Cara Mengendalikan \"datastore: meratakan struct bersarang membawa kepada sekeping hirisan\" Ralat dalam Go Datastore?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn