Why can't I put the opening braces on the next line?
当我试图编译以下代码时遇到一个奇怪的错误:
1 2 3 4 5 6 7 8 9 10 11 12 | package main import fmt"fmt" func main() { var arr [3]int for i:=0; i<3; i++ { fmt.Printf("%d",arr[i]) } } |
错误如下:
1 | unexpected semicolon or newline before { |
号
修正后,以下代码生效:
1 2 3 4 5 6 7 8 9 10 | package main import fmt"fmt" func main(){ var arr [3]int for i:=0; i<3; i++{ fmt.Printf("%d",arr[i]) } } |
Go语言是严格打出来的吗?这也没有警告。这不应该是一个程序员的选择,他想如何格式化他的代码?go语言警告和错误
Go语言自动插入分号,因此
参见Go的常见问题解答:为什么有大括号但没有分号?为什么我不能把开口撑放在下一行呢?
go语言包含带有特定规则的分号,在您的例子中,i++后面的新行在""前面引入了分号。请参阅http://golang.org/doc/go_spec.html。
格式化在某种程度上是语言的一部分,使用gofmt使代码看起来类似,但是,您可以用许多不同的方式格式化代码。
Should this not be a programmers choice how he wants to format his
code?
号
也许吧。我认为向前走一步以避免一些自行车脱落是很好的,比如永不结束的风格讨论。甚至还有一个工具,gofmt,它以标准样式格式化代码,确保大多数go代码遵循相同的准则。就像他们说的:"处处一致>个人偏好。习惯吧,这很好(tm)。"
Go代码具有必需的支撑样式。同样地,程序员不能选择在Python中使用大括号,因此需要使用缩进。
所需的支撑样式允许分号插入工作,而不需要解析器向前看下一行(如果要实现一个repl-for-go代码,这很有用)。
1 2 3 | package main func main(); |
是有效的go代码,在不查看下一行的情况下,解析器假定这是您的意思,然后会被未连接到您在其后面放置的任何内容的块所混淆。
在所有GO代码中使用相同的支撑样式可以使阅读更容易,并且避免讨论支撑样式。
Go-lang使用严格的规则来维护像python这样的阅读器的唯一可见性,使用可视化代码ide,它将进行自动格式化和错误检测。