通常,我将初始化一个类似的结构:
item1 := Item{1, "Foo"}
但是,我最近看到了用括号初始化的代码:
item2 := (Item{2, "Bar"})
reflect
返回相同的Item
名称。
括号中的内容起什么作用?何时首选?
这是一些Go代码可以尝试一下:
没什么特别的,那两行是相同的。
但是,例如,当您要在if
语句中使用它时,将需要使用括号,否则会出现编译时错误:
if i := Item{3, "a"}; i.Id == 3 {
}
结果是:
预期的布尔表达式,找到简单的语句(是否在合成文字周围缺少括号?)(以及另外1个错误)
这是因为产生了解析歧义:左花括号是复合文字或if
语句主体的一部分并不清楚。
使用括号将使其对于编译器而言是明确的,因此可以这样做:
if i := (Item{3, "a"}); i.Id == 3 {
}
有关详细信息,请参见:在for循环初始化程序中构造
Java中的双大括号初始化语法()是什么?
问题内容: 我是Golang的新手,所以分配它会让我发疯: 之后,我打电话给: 这时我得到了nil指针恐慌。 我通过使用另一个函数并在之后调用它来解决该问题: 但是我想知道,是否有可能摆脱这种样板初始化? 问题答案: 您只需要一个构造函数。常用的模式是 如果结构中有更多字段,启动goroutine作为后端或注册终结器,则可以在此构造函数中完成所有操作。
问题内容: 嗨,我是Golang的新手,请帮助我。我已经在结构内部定义了一个结构。但是,当我尝试初始化主结构时出现错误。 我得到的错误是:不能在字段值中使用(类型接口{})作为类型结构:需要类型声明。 请提出一种初始化DetailsFilter的方法。我尝试执行在Golang中初始化嵌套结构中描述的方法,但即使这样也不起作用。 问题答案: 不幸的是,如果结构字段的类型是匿名结构,则 _在构造时_只
我已经在网上搜索了这个问题的答案,但我还没有找到一个满意的答案。我想知道初始化结构和类类型的对象的所有规则是什么,特别是在构造函数与带括号的初始化列表方面。结构与类的规则也不同吗? 让我们假设有一个名为矩形的类或结构。 我尝试用C语言中通常使用的方式初始化矩形r,使用一个普通的带括号的初始值设定项列表。但是,g给出以下错误: 嗯……嗯。。。。乍一看,这并不是很有用的错误消息。然而,我认为它与构造函
为什么?
在Go语言规范中,提到了对标签的简要概述: 字段声明之后可能会有一个可选的字符串文字标记,该标记将成为相应字段声明中所有字段的属性。标记通过反射界面可见,但在其他情况下被忽略。 这是一个非常简短的解释,我想知道是否有人能给我提供这些标签的用途?