在 for、func 或 if 语句之后的 go块是否必须在同一行有左大括号?如果我将它向下移动,我会得到一个编译错误,但我在语言规范中看不到它们表明必须像这样构造一个块。
块是匹配大括号内的一系列声明和语句。
块 = "{" { 语句 ";" } "}" 。
IfStmt = "如果" [ SimpleStmt ";" ] 表达式块 ["else" (IfStmt | Block)]。
在 for、func 或 if 语句之后的 go块是否必须在同一行有左大括号?如果我将它向下移动,我会得到一个编译错误,但我在语言规范中看不到它们表明必须像这样构造一个块。
块是匹配大括号内的一系列声明和语句。
块 = "{" { 语句 ";" } "}" 。
IfStmt = "如果" [ SimpleStmt ";" ] 表达式块 ["else" (IfStmt | Block)]。
由于分号推断,从Effective Go开始:
一个警告。
永远不要将控制结构(if、for、switch 或 select)的左大括号放在下一行。
如果这样做,将在大括号前插入分号,这可能会导致不良影响。像这样写它们:
if i < f() {
g()
}
不是这样的:
if i < f() // wrong!
{ // wrong!
g()
}
作为jnml评论,语言语法对于 blocks 是正确的。
但是结合分号注入,这意味着你真的应该:
if
' 不会做你认为应该做的事情)gofmt
它而不去想它(最好每次将代码保存在编辑器中时都对其进行 gofmt。它速度很快,并且会使您的代码与其他任何Go 代码保持一致)甚至 Go 编译器也会强制执行“大括号同一行”规则,以避免任何不可预见的副作用。
所以语言参考并没有说明将大括号放在哪里,但是gofmt
编译器和编译器都会确保它被正确放置在if
语句中。