gpt4 book ai didi

go - 使用位于数据存储中其他包中的(子)结构

转载 作者:IT王子 更新时间:2023-10-29 02:32:36 30 4
gpt4 key购买 nike

我找不到与此相关的任何信息。假设您调用一个 API 并将生成的 json 保存到包 Foo 中的一个结构中,如下所示:

package foo

type FooData struct {
A string `json:"c"`
B int `json:"c"`
C int64 `json:"c"`
}

那么你就有了自己的模型包:

package bar

import (
"github.com/bla/bla/foo"
)

type BarData struct {
A float
Foo foo.FooData
}

这可能吗?这样做有什么负面影响吗?原因是结构体超过一百行,所以我觉得复制它很浪费。

此外,如果我只想在 B 中建立索引怎么办?然后我可以将其更改为:

type FooData struct {
A string `datastore:",noindex" `json:"c"`
B int `json:"c"`
C int64 `datastore:",noindex" `json:"c"`
}

?

编辑:为了清楚起见,我的目的是将 BarData 结构保存在 Datastore 中

最佳答案

Go Datastore 包有一些与此相关的文档 - https://cloud.google.com/appengine/docs/standard/go/datastore/reference#hdr-Structured_Properties

“结构化属性”

如果指向的结构包含其他结构,则嵌套或嵌入的结构将被展平。例如,给出这些定义:

type Inner1 struct {
W int32
X string
}
type Inner2 struct {
Y float64
}
type Inner3 struct {
Z bool
}
type Outer struct {
A int16
I []Inner1
J Inner2
Inner3
}

那么 Outer 的属性将等同于:

type OuterEquivalent struct {
A int16
IDotW []int32 `datastore:"I.W"`
IDotX []string `datastore:"I.X"`
JDotY float64 `datastore:"J.Y"`
Z bool
}

如果 Outer 的嵌入 Inner3 字段被标记为 datastore:"Foo"那么等效字段将改为:FooDotZ bool datastore:"Foo.Z" .

如果外部结构被标记为“noindex”,则其所有隐式展平字段实际上都是“noindex”。

因此存储嵌套结构不应该有任何问题,只是要注意它们将在数据存储中展平。它还提到了无索引,说任何字段都从其父结构继承了“noindex”。我不明白为什么内部字段的“noindex”标记不起作用。

关于go - 使用位于数据存储中其他包中的(子)结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44038401/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com