为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中从 Python 项目加载数据存储实体导致嵌套结构切片错误

在 Go 中从 Python 项目加载数据存储实体导致嵌套结构切片错误

Go
慕村225694 2021-06-28 14:59:27
出于性能原因,我正在 Go 中的 Google AppEngine 项目中编写一个模块,但需要能够从我在数据存储中的一些实体中读取。我写出了 Go 代码,以便能够读取我在 Python 中构建的实体,但出现以下错误:datastore: flattening nested structs leads to a slice of slices: field "Messages"Python 中的模型定义:class ModelB(ndb.Model):    msg_id = ndb.StringProperty(indexed=False)    cat_ids = ndb.StringProperty(repeated=True, indexed=False)    list_ids = ndb.StringProperty(repeated=True, indexed=False)    default_list_id_index = ndb.IntegerProperty(indexed=False)class ModelA(ndb.Model):    date_join = ndb.DateTimeProperty(auto_now_add=True)    name = ndb.StringProperty()    owner_salutation = ndb.StringProperty(indexed=False)    owner_email_address = ndb.StringProperty()    logo_url = ndb.StringProperty(indexed=False)    ...    messages = ndb.LocalStructuredProperty(ModelB, name='bm', repeated=True)在 Go 中:type ModelB struct {    MessageID          string   `datastore:"msg_id,noindex"`    CategoryIDs        []string `datastore:"cat_ids,noindex"`    ListIDs            []string `datastore:"list_ids,noindex"`    DefaultListIDIndex int      `datastore:"default_list_id_index,noindex"`}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:"bm,"`}我在这里做错了吗?仅仅是 Go 与 Python 模型定义之间的功能不兼容吗?
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

Go 数据存储包不支持这样的两层切片。[]ModelB只要ModelB不包含任何切片,您就可以拥有。或者,您可以使用ModelBin ModelA,并且ModelB可以在其中包含切片。但是你不能两者兼得,[]ModelB而且ModelB有切片。请参阅错误条件的代码。您的选择:

  1. 不要在 Go 中这样做

  2. 编写自己的数据存储解串器来处理这种情况 - 这可能很难

  3. 更改您的 Python 数据结构以满足 Go 要求并重写您的数据


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信