For loop 循环中打开大括号的语法规则 案例1
此程序成功编译:For loop 循环中打开大括号的语法规则 案例1,for-loop,go,syntax,curly-braces,For Loop,Go,Syntax,Curly Braces,此程序成功编译: package main import ( "fmt" ) func main() { i := 0 for { fmt.Println(i) } } 主程序包 进口( “fmt” ) func main(){ i:=0 对于;i
package main
import (
"fmt"
)
func main() {
i := 0
for
{
fmt.Println(i)
}
}
主程序包
进口(
“fmt”
)
func main(){
i:=0
对于;i<3;i++{
fmt.Println(一)
}
}
案例2
但这并不是:
主程序包
进口(
“fmt”
)
func main(){
i:=0
因为;我<3;我++
{
fmt.Println(一)
}
}
这会导致错误:
./prog.go:9:18: syntax error: unexpected newline, expecting { after for clause
案例3
但这成功地编译了:
package main
import (
"fmt"
)
func main() {
i := 0
for
{
fmt.Println(i)
}
}
问题:
为什么在案例2中,下一行中不允许使用的开头大括号,但在案例3中允许使用?简而言之,当您将此列在一行中时:
for ; i < 3; i++
for;i<3;我++
分号将自动插入,导致语法错误
当输入被分解为令牌时,分号会自动插入到令牌流中,紧跟在行的最终令牌之后(如果该令牌是
- 一个
- 、或文字
,中断
,继续
,或故障排除
返回
- 其中一个
,++
,--
,)
或]
}
for
时,不插入分号(根据上面引用的规则,分号仅在中断
、继续
、故障排除
和返回
关键字后插入)。因此,在情况3中,代码不会用分号进行扩展,并且在语法上保持正确
有关更多详细信息,请参阅主程序包
进口(
“fmt”
)
func main(){
i:=0
因为;我<3;我++{
fmt.Println(一)
}
}
只不过将{
放入新行会导致出现错误
在案例3中,您没有任何要评估的语句,因此新行不会导致y问题。最后一行可能不被允许,它可能是一个bug,但从我对规范的阅读来看,这不是100%清楚的,为什么会出现否决票?我如何才能更好地回答这个问题?