当我尝试编译以下代码时遇到一个奇怪的错误:
package main import fmt "fmt" func main() { var arr [3]int for i:=0; i<3; i++ { fmt.Printf("%d",arr[i]) } }
错误如下:
unexpected semicolon or newline before {
在代码工作后纠正后:
package main import fmt "fmt" func main(){ var arr [3]int for i:=0; i<3; i++{ fmt.Printf("%d",arr[i]) } }
GO语言是否严格键入?这也没有警告。这不是程序员的选择,他想如何格式化他的代码? Go language warnings and errors
答案 0 :(得分:11)
Go语言执行自动分号插入,因此{
唯一允许的位置在前一行的末尾。始终使用与gofmt
生成相同的样式编写Go代码,您将没有任何问题。
请参阅Go常见问题解答:Why are there braces but no semicolons? And why can't I put the opening brace on the next line?
答案 1 :(得分:7)
go语言包含带有特定规则的分号,在你的情况下,i ++之后的换行符在'{'之前引入了一个分号。见http://golang.org/doc/go_spec.html。
格式化是语言的一部分,使用gofmt使代码看起来很相似,但是,您可以通过多种方式格式化代码。
答案 2 :(得分:2)
Go代码具有所需的支撑样式。 就像程序员不能选择在python中使用大括号并且需要使用缩进一样。
所需的支撑样式允许分号插入工作,而不需要解析器向前看下一行(如果你想为GO代码实现REPL,这很有用)
package main
func main();
是有效的Go代码,在没有查看下一行的情况下,解析器假定这是你的意思,然后被与你之后放置的任何内容没有关联的块混淆。
通过所有Go代码具有相同的支撑风格,使其更容易阅读,并避免讨论支撑风格。
答案 3 :(得分:2)
这不应该是程序员选择他想要如何格式化他的 码?
也许。我认为Go向前迈进是为了避免一些自行车脱落,就像永无止境的风格讨论一样。甚至还有一个工具gofmt,它以标准样式格式化代码,确保大多数Go代码遵循相同的准则。就像他们说的那样:“无处不在&gt;个人喜好。习惯它,这是好的(tm)。”
答案 4 :(得分:0)
Go lang严格遵守规则,以保持像Python这样的阅读器的唯一可见性,使用可视代码IDE,它将进行自动格式化和错误检测。
答案 5 :(得分:-2)
Go 代码具有必需的支撑样式。 事实是支撑样式是一个更基本的东西,因为我的大脑可以通过新行的支撑更快地读取代码,go 是由谷歌设计的,他们不喜欢人们选择自己的样式。这只是谷歌向世界实施强制编码风格......它是“按我的方式做或根本不做”。在 Kotlin 中,他们允许你,但自动格式化程序会改变它。
我应该有权选择我的大脑认为更容易的东西。