情況1該程序編譯成功:package mainimport ( "fmt")func main() { i := 0 for ; i < 3; i++ { fmt.Println(i) }}案例2但這不會:package mainimport ( "fmt")func main() { i := 0 for ; i < 3; i++ { fmt.Println(i) }}這會導致錯誤:./prog.go:9:18: syntax error: unexpected newline, expecting { after for clause案例3但這編譯成功:package mainimport ( "fmt")func main() { i := 0 for { fmt.Println(i) }}問題為什么在情況 2for中,下一行中不允許使用左括號,但在情況 3 中卻允許?
2 回答
滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
簡而言之,當你有這個時:
for ; i < 3; i++
會自動插入分號,導致語法錯誤。
當輸入被分解為標記時,如果該標記是
因此,在案例 2中,詞法分析器將自動在行尾插入一個分號,當該分號出現時,將“呈現”語法不正確的代碼。
不是在情況 3中,當一行中只有 afor時,不插入分號(根據上面引用的規則,分號只插入在、 和break關鍵字continue之后)。所以在案例 3中,代碼不會用分號擴展,并且在語法上保持正確。fallthroughreturn
呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
package main
import (
"fmt"
)
func main() {
i := 0
for ; i < 3; i++{
fmt.Println(i)
}
}
工作它只是放入{一個新行會導致你得到的錯誤。
在案例 3 中,您沒有任何要評估的語句,因此新行不會導致 y 問題。
- 2 回答
- 0 關注
- 238 瀏覽
添加回答
舉報
0/150
提交
取消
