似乎Structured Properties部分中提到的旧的Appengine数据存储库用于拉平嵌入的结构。
并且根据this announcement:默认情况下,除非明确展平,云数据存储客户端库默认将嵌入式结构存储为实体值。
但是,即使在Cloud Datastore客户端库中,匿名结构也似乎已被压平。
Old Datastore API docs中的“包字段”部分指示此行为:
这些规则在没有标签的情况下适用:匿名结构字段为 视为其内部导出字段是外部字段 结构(嵌入)。结果包括所有不包含的字段 在较高嵌入级别下被字段遮蔽。
如果不止一个 具有相同名称的字段存在于相同的嵌入级别,它是 排除在外。非struct类型的匿名字段被视为 以其类型作为名称。
看看package datastore API docs中的“结构化属性”,在上一个示例中,Inner3匿名结构具有一个显式标记要展平,但即使没有显式标记,其行为也似乎相同。
那么,是否可以假设拥有一个没有任何结构的匿名结构将始终是扁平化的?还是我们明确需要一个标签来扁平化?
答案 0 :(得分:0)
不。如果要平整实体,应始终添加该标志。
让我们看一下Structured Properties的第一个示例:
type Inner struct {
W int32
X string
Y bool
}
type Outer struct {
I Inner
}
外部将具有一个属性,即内部,被编码为实体值。即使内部只有一个字段。
另一方面,如果您添加了flatten
标志,如下所示:
type Outer struct {
I Inner `datastore:",flatten"`
}
外部外观如下:
type OuterEquivalent struct {
IDotW int32 `datastore:"I.W"`
IDotX string `datastore:"I.X"`
IDotY bool `datastore:"I.Y"`
}
因此,Datastore API不会自动平整您的实体。