在括号中初始化 Go 结构有什么作用?
What does initializing a Go struct in parentheses do?
通常,我会像这样初始化一个结构:
item1 := Item{1, "Foo"}
不过,我最近看到代码用括号初始化:
item2 := (Item{2, "Bar"})
reflect
returns 同一个 Item
名字。
括号中的初始化有什么作用,何时首选?
这里有一些 Go 代码来尝试这个:
没什么特别的,这两行是相同的。
但是,当您想在 if
语句中使用它时,括号是必需的,否则会出现编译时错误:
if i := Item{3, "a"}; i.Id == 3 {
}
结果:
expected boolean expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
这是因为出现了解析歧义:左大括号是复合文字的一部分还是 if
语句的主体并不明显。
使用圆括号会使编译器明确无歧义,所以这行得通:
if i := (Item{3, "a"}); i.Id == 3 {
}
详情见:
通常,我会像这样初始化一个结构:
item1 := Item{1, "Foo"}
不过,我最近看到代码用括号初始化:
item2 := (Item{2, "Bar"})
reflect
returns 同一个 Item
名字。
括号中的初始化有什么作用,何时首选?
这里有一些 Go 代码来尝试这个:
没什么特别的,这两行是相同的。
但是,当您想在 if
语句中使用它时,括号是必需的,否则会出现编译时错误:
if i := Item{3, "a"}; i.Id == 3 {
}
结果:
expected boolean expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
这是因为出现了解析歧义:左大括号是复合文字的一部分还是 if
语句的主体并不明显。
使用圆括号会使编译器明确无歧义,所以这行得通:
if i := (Item{3, "a"}); i.Id == 3 {
}
详情见: