使用Go在GAE数据存储上嵌套的结构

时间:2013-01-13 21:45:12

标签: google-app-engine google-cloud-datastore go

我正在尝试弄清楚如何使用Go来使嵌套结构与GAE数据存储区一起使用。我知道数据存储区并不专门支持嵌套结构。我需要找到一种简单的方法来获取用户信息,以便在将其作为JSON发送给用户时使用帖子。

我想到的一件事是为用户添加两个字段。一个用于引用用户的ID /密钥,另一个用于用户类型struct,当从数据存储区加载帖子时,将添加该用户类型struct。额外的字段似乎很傻,所以我希望有更好的解决方案。

有两种实体类型或结构:POST和USER

帖子需要包含有关发布帖子的用户的信息。

我要为用户输出的JSON结构如下:

  • POST
    • FIELD1
    • FIELD2
    • USER
      • user_field1
      • user_Field2

2 个答案:

答案 0 :(得分:9)

Go的appengine datastore api为这类事情提供了PropertyLoadSaver接口:https://developers.google.com/appengine/docs/go/datastore/reference#PropertyLoadSaver

您可以根据需要构建结构,然后实现该接口的Load和Save方法以正确填充它。这意味着您自己编写序列化代码,但它可以让您完全自由地构建数据。

这将允许您仍然过滤字段并具有嵌套结构。

答案 1 :(得分:0)

python运行时具有ndb库,它支持这样的嵌套结构。 Go没有,所以我可以想到两个解决方案:

  1. 在POST类型中,使用一个用户字段作为键,引用带有必要字段的USER类型。需要两次抓取和往返。
  2. 在POST类型中创建一个blob的用户字段。 blob是一个在go中[de]序列化的字符串。这意味着您无法搜索或过滤任何用户数据,但它也允许您将所有内容存储在一个实体中。
  3. 您应该根据应用的需要使用这些内容。如果您需要用户是真品,请使用1.如果用户不是您需要使用的对象(即只显示数据),您可以使用2.