如果/ for / func阻止打开支撑位置需要在同一条线上吗?

时间:2012-07-23 06:28:00

标签: go

在for,func或if语句后面的阻止是否必须在同一行上有左括号?如果我将其向下移动,我会收到编译错误,但我无法在语言规范中看到它们表明块必须像这样构造。

  

块是匹配中的一系列声明和语句   支架。

     

Block =“{”{Statement“;” }“}”。

     

IfStmt =“if”[SimpleStmt“;” ]表达式块[“else”(IfStmt |   Block)]。

1 个答案:

答案 0 :(得分:3)

来自Effective Go,因为有分号推断:

  

一个警告。
  你不应该把控制结构的开括号(if,for,switch或select)放在下一行   如果这样做,将在大括号之前插入分号,这可能会导致不良影响。写下这样的:

if i < f() {
    g()
}
  

不喜欢这样:

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

jnml评论,language syntax is correct for blocks 但是与<{3}}合并,这意味着你应该真的:

  • 总是将大括号放在与if语句相同的行上(或者“if”不会按照您的想法执行)
  • 实际上,总是使用Semicolon injection并且不考虑它(最好每次将代码保存到编辑器中时都要编写代码。这很快,并且会使代码与的其余部分保持一致任何 Go代码)

即使是Go编译器也会强制执行“相同的支撑线”规则,以避免任何不可预见的副作用。
所以语言参考没有说明放置括号的位置,但gofmt和编译器都会确保它被正确放置为if语句。