3

在 for、func 或 if 语句之后的 go是否必须在同一行有左大括号?如果我将它向下移动,我会得到一个编译错误,但我在语言规范中看不到它们表明必须像这样构造一个块。

块是匹配大括号内的一系列声明和语句。

块 = "{" { 语句 ";" } "}" 。

IfStmt = "如果" [ SimpleStmt ";" ] 表达式块 ["else" (IfStmt | Block)]。

4

1 回答 1

3

由于分号推断,从Effective Go开始:

一个警告。
永远不要将控制结构(if、for、switch 或 select)的左大括号放在下一行。
如果这样做,将在大括号前插入分号,这可能会导致不良影响。像这样写它们:

if i < f() {
    g()
}

不是这样的:

if i < f()  // wrong!
{           // wrong!
    g()
}

作为jnml评论,语言语法对于 blocks 是正确的
但是结合分号注入,这意味着你真的应该:

  • 始终将大括号与 if 语句放在同一行(否则 ' if' 不会做你认为应该做的事情)
  • 实际上,总是使用gofmt它而不去想它(最好每次将代码保存在编辑器中时都对其进行 gofmt。它速度很快,并且会使您的代码与其他任何Go 代码保持一致)

甚至 Go 编译器也会强制执行“大括号同一行”规则,以避免任何不可预见的副作用。
所以语言参考并没有说明将大括号放在哪里,但是gofmt编译器和编译器都会确保它被正确放置在if语句中。

于 2012-07-23T06:56:24.037 回答