为什么我不能把开口括号放在下一行?

时间:2011-08-15 06:39:22

标签: error-handling go

当我尝试编译以下代码时遇到一个奇怪的错误:


    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

6 个答案:

答案 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 中,他们允许你,但自动格式化程序会改变它。

我应该有权选择我的大脑认为更容易的东西。