在 Go for 循环中打开大括号的语法规则

Lon*_*ner 0 syntax for-loop curly-braces go

情况1

该程序编译成功:

package main

import (
    "fmt"
)

func main() {
    i := 0
    for ; i < 3; i++ {
        fmt.Println(i)
    }
}
Run Code Online (Sandbox Code Playgroud)

案例二

但这不会:

package main

import (
    "fmt"
)

func main() {
    i := 0
    for ; i < 3; i++
    {
        fmt.Println(i)
    }
}
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

./prog.go:9:18: syntax error: unexpected newline, expecting { after for clause
Run Code Online (Sandbox Code Playgroud)

案例3

但这编译成功:

package main

import (
    "fmt"
)

func main() {
    i := 0
    for
    {
        fmt.Println(i)
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在情况 2 中,for下一行不允许使用左大括号,但在情况 3 中允许?

icz*_*cza 12

简而言之,当你有这个时:

for ; i < 3; i++
Run Code Online (Sandbox Code Playgroud)

分号会自动插入,导致语法错误。

规格: 分号:

当输入被分解为标记时,如果该标记是

因此,在第 2 种情况下,词法分析器将自动在行尾插入分号,分号存在时将“呈现”语法错误的代码。

未在情形3时,有仅for在一条线上,没有分号插入(按照以上引用的规则,分号仅在插入之后breakcontinuefallthroughreturn关键字)。所以在案例 3 中,代码不会用分号扩展,并且在语法上保持正确。

有关更多详细信息,请参阅如何在 Golang 中中断一长行代码?