首页  >  文章  >  后端开发  >  如何处理 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>

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 Datastore 中的“数据存储:扁平化嵌套结构导致切片切片”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn