首页 > 解决方案 > 语法错误:变量用作值,Go 中的 for 循环

问题描述

我对 Go 完全陌生,正在浏览https://tour.golang.org/flowcontrol/8

我尝试了以下for循环(它是否真正解决了页面带来的问题无关紧要,我只对这里的语法感兴趣)。您可以假设zx给出:

for z < x; z -= (z*z - x) / (2*z) {
    fmt.Println(z)
}

尝试运行时出现以下错误:

./prog.go:9:36: syntax error: unexpected {, expecting semicolon or newline ./prog.go:10:17: syntax error: z -= (z * z - x) / (2 * z) used as value

我可以通过将循环更改为这样来摆脱第一个错误:

for z < x; z -= (z*z - x) / (2*z); {
    fmt.Println(z)
}

但我仍然得到第二个错误。

标签: loopsgo

解决方案


你的循环应该是这样的

for ;z < x; z -= (z*z - x) / (2*z) { fmt.Println(z) }

; 应该出现在z < x条件之前这是因为,for循环的语法是for [control var];[健康)状况] ; [迭代] { //正文 }

就一个可以用作空语句,因此通过使用它,我们为 for 循环提供了所有必需的参数。 ; x < z; x++正如您所看到的,第一个分号表示空/空语句(因为我们没有设置任何变量),第二个是条件,第三个是迭代命令。

现在您可以清楚地理解,在您的第二种方法中, z < x; z -= (z*z - x) / (2*z);z<x 是控制变量,这会导致错误,因为 (z<x) 不是变量。错误的原因是 z -=( z*zx)/(2*z) 被认为是条件值,因为这不是一个值,而是一个抛出错误的语句。

希望你能理解...


推荐阅读