当前位置: 首页 > 面试题库 >

在括号中初始化Go结构有什么作用?

谭浩皛
2023-03-14
问题内容

通常,我将初始化一个类似的结构:

item1 := Item{1, "Foo"}

但是,我最近看到了用括号初始化的代码:

item2 := (Item{2, "Bar"})

reflect返回相同的Item名称。

括号中的内容起什么作用?何时首选?

这是一些Go代码可以尝试一下:

  • 游乐场:https : //play.golang.org/p/_gsaruS_DVi

问题答案:

没什么特别的,那两行是相同的。

但是,例如,当您要在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语言规范中,提到了对标签的简要概述: 字段声明之后可能会有一个可选的字符串文字标记,该标记将成为相应字段声明中所有字段的属性。标记通过反射界面可见,但在其他情况下被忽略。 这是一个非常简短的解释,我想知道是否有人能给我提供这些标签的用途?