首頁  >  文章  >  後端開發  >  如何處理 Go Datastore 中的「資料儲存:扁平化巢狀結構導致切片切片」錯誤?

如何處理 Go Datastore 中的「資料儲存:扁平化巢狀結構導致切片切片」錯誤?

DDD
DDD原創
2024-10-25 16:35:51768瀏覽

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>
Python:

Python:

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

type ModelA struct {
    ...
    Messages []ModelB `datastore:"bm,"`
}</code>
Go:

在這種情況下,會出現錯誤,因為Go 模型定義ModelB 的一部份(ModelA.Messages)。但是,ModelB 本身有一個切片 (ModelB.MessageID)。若要解決此問題,請確保 ModelA.Messages 是 ModelB 的平面切片,或重新設計資料結構以避免嵌套切片。

以上是如何處理 Go Datastore 中的「資料儲存:扁平化巢狀結構導致切片切片」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn