嗨,我是Golang的新手,请帮助我。我已经在结构内部定义了一个结构。但是,当我尝试初始化主结构时出现错误。
type DetailsFilter struct {
Filter struct {
Name string
ID int
}
}
var M map[string]interface{}
M = make(map[string]interface{})
M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5}
var detailsFilter = DetailsFilter{Filter: M["Filter"]}}
我得到的错误是:不能在字段值中使用(类型接口{})作为类型结构:需要类型声明。
请提出一种初始化DetailsFilter的方法。我尝试执行在Golang中初始化嵌套结构中描述的方法,但即使这样也不起作用。
不幸的是,如果结构字段的类型是匿名结构,则 _在构造时_只能通过“复制”匿名结构类型(再次指定)来初始化它:
type DetailsFilter struct {
Filter struct {
Name string
ID int
}
}
df := DetailsFilter{Filter: struct {
Name string
ID int
}{Name: "myname", ID: 123}}
fmt.Println(df)
输出:
{Filter:{Name:myname ID:123}}
因此,我建议不要在构造时初始化它,而是在创建零值结构之后初始化它,如下所示:
df = DetailsFilter{}
df.Filter.Name = "myname2"
df.Filter.ID = 321
fmt.Printf("%+v\n", df)
输出:
{Filter:{Name:myname2 ID:321}}
在Go Playground上尝试一下。
或者根本不使用匿名结构作为字段类型,而应像这样命名类型:
type Filter struct {
Name string
ID int
}
type DetailsFilter struct {
Filter Filter
}
然后,您可以像这样简单地对其进行初始化:
df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}}
fmt.Printf("%+v\n", df)
输出(在Go Playground上尝试):
{Filter:{Name:myname ID:123}}
问题内容: 我不知道如何初始化嵌套结构。在此处找到示例:http: //play.golang.org/p/NL6VXdHrjh 问题答案: 好吧,有什么特定的原因不使Proxy成为自己的结构? 无论如何,您有2个选择: 正确的方法是,只需将proxy移至其自己的结构,例如: 不太正确和丑陋的方法,但仍然有效:
问题内容: 您如何初始化以下结构? 我试过了: 没用: 我试过了: 没用: 问题答案: 您是一个具有匿名结构类型的字段。因此,您必须重复类型定义: 但在大多数情况下,最好将其定义为rob74建议的单独类型。
问题内容: 我怎样才能做到这一点: … 给出的编译结果为:“结构文字中的未知B字段’MemberA’” 当提供像这样的文字结构成员值时,如何初始化MemberA(从“父”结构)? 问题答案: 初始化时,匿名结构仅在其类型名称下(在您的情况下)是已知的。与该结构关联的成员和函数仅在实例存在之后才导出到外部。 您必须提供一个有效的实例来初始化: 编译错误 结构文字中的未知B字段’MemberA’ 确切
问题内容: 我是Golang的新手,所以分配它会让我发疯: 之后,我打电话给: 这时我得到了nil指针恐慌。 我通过使用另一个函数并在之后调用它来解决该问题: 但是我想知道,是否有可能摆脱这种样板初始化? 问题答案: 您只需要一个构造函数。常用的模式是 如果结构中有更多字段,启动goroutine作为后端或注册终结器,则可以在此构造函数中完成所有操作。
问题内容: 我有一个json作为 我想将我的结构编组到json之上并创建如下结构- 我在初始化上述结构时遇到麻烦。我不确定如何以以下方式初始化匿名结构: 我通过为页面信息创建一个单独的结构并将其与父结构附加在一起来解决此问题。但是,必须有某种方法来执行 匿名 嵌套结构的初始化,就像我对上面的 Fields (字符串切片)所做的一样。谁能将我重定向到一些指南来做到这一点? 问题答案: 这可行,但是很
根据价值初始化规则。发生值初始化: 1,5)当使用由空括号或大括号组成的初始值设定项创建无名临时对象时(从C 11开始); 2,6)当一个具有动态存储持续时间的对象是由一个新表达式创建的,初始化器由一对空括号或大括号组成(从C11开始); 3,7)当使用带有空括号或大括号对的成员初始值设定项初始化非静态数据成员或基类时(自C 11起); 4)当使用由一对大括号组成的初始化程序声明命名变量(自动、静