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

Anu*_*rma 2 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语言这么严格打字吗?这也没有警告.这不是程序员的选择,他想如何格式化他的代码? 去语言警告和错误

Esk*_*ola 11

Go语言执行自动分号插入,因此唯一允许的位置{是在前一行的末尾.始终使用与产品相同的样式编写Go代码gofmt,您将没有任何问题.

请参阅Go的FAQ:为什么有括号但没有分号?为什么我不能把开口支架放在下一行?


小智 7

go语言包括带有特定规则的分号,在你的情况下,i ++之后的换行符在'{'之前引入了一个分号.见http://golang.org/doc/go_spec.html.

格式化是语言的一部分,使用gofmt使代码看起来很相似,但是,您可以通过许多不同的方式格式化代码.


Jes*_*sta 5

Go 代码有必需的支撑样式。就像Python中程序员不能选择使用大括号而必须使用缩进一样。

所需的大括号样式允许分号插入工作,而不需要解析器向前查看下一行(如果您想为 GO 代码实现 REPL,这很有用)

package main

func main();
Run Code Online (Sandbox Code Playgroud)

是有效的 Go 代码,并且在不查看下一行的情况下,解析器会假设这就是您的意思,然后被未连接到您在其后面放置的任何内容的块所混淆。

所有 Go 代码都具有相同的支撑样式,使其更易于阅读,并且还避免了有关支撑样式的讨论。