Rumah >pembangunan bahagian belakang >Golang >## Mengapakah Saya Tidak Boleh Dapatkan Entiti daripada Go Datastore dengan Slices Bersarang?
Go Datastore Error: Nested Structs Slices of Slices
Dalam usaha memanfaatkan Go untuk prestasi yang dipertingkatkan, anda telah menghadapi ralat semasa mencuba untuk mendapatkan semula entiti daripada stor data AppEngine yang ditakrifkan dalam Python. Mesej ralat "stor data: meratakan struktur bersarang membawa kepada sekeping kepingan: medan "Mesej"" menunjukkan ketidakpadanan struktur antara model projek Go dan Python anda.
Definisi Model Go dan Keserasian Datastore
Pakej stor data Go mempunyai had tertentu mengenai struktur model data anda. Ia tidak menyokong kepingan bersarang dalam kepingan, seperti medan "Mesej" dalam definisi ModelA anda. Ini bermakna walaupun anda boleh mempunyai sekeping entiti ModelB dalam ModelA, ModelB sendiri tidak boleh mempunyai sebarang kepingan dalam medannya sendiri.
Pilihan Alternatif untuk Menyelesaikan Ralat
Untuk menyelesaikan ralat ini, anda mempunyai beberapa pilihan:
Contoh: PropertyLoaderSaver untuk Penyahserikatan Tersuai
Jika anda memilih penyahserialisasi tersuai pendekatan, anda boleh menentukan pelaksanaan antara muka PropertyLoaderSaver untuk ModelA untuk mengendalikan penyahserialisasian medan "Mesej". Berikut ialah contoh:
<code class="go">import ( "appengine_internal/datastore" "code.google.com/p/goprotobuf/proto" pb "appengine_internal/datastore" ) type ModelA struct { DateJoin time.Time `datastore:"date_join,"` Name string `datastore:"name,"` OwnerSalutation string `datastore:"owner_salutation,noindex"` OwnerEmailAddress string `datastore:"owner_email_address,"` LogoURL string `datastore:"logo_url,noindex"` Messages []ModelB `datastore:"-"` } // Load implements the PropertyLoaderSaver interface. func (seller *ModelA) Load(c <-chan datastore.Property) error { f := make(chan datastore.Property, 100) for p := range c { if p.Name == "bm" { var val pb.EntityProto err := proto.Unmarshal([]byte(p.Value.(string)), &val) if err != nil { return err } // TODO: Store the result as a new ModelB instance. } else { f <- p } } close(f) return datastore.LoadStruct(seller, f) }</code>
Atas ialah kandungan terperinci ## Mengapakah Saya Tidak Boleh Dapatkan Entiti daripada Go Datastore dengan Slices Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!