在for,func或if语句后面的阻止是否必须在同一行上有左括号?如果我将其向下移动,我会收到编译错误,但我无法在语言规范中看到它们表明块必须像这样构造。
块是匹配中的一系列声明和语句 支架。
Block =“{”{Statement“;” }“}”。
IfStmt =“if”[SimpleStmt“;” ]表达式块[“else”(IfStmt | Block)]。
答案 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
”不会按照您的想法执行)即使是Go编译器也会强制执行“相同的支撑线”规则,以避免任何不可预见的副作用。
所以语言参考没有说明放置括号的位置,但gofmt
和编译器都会确保它被正确放置为if
语句。