我有以下程序。
package main
import (
"fmt"
)
func main() {
for i := 0; i < 2; i++ {
x := 77
fmt.Println(x)
}
}
执行时我得到:
77
77
正如我们所看到的,x := 77
已执行2次。但是,如果我像这样稍微修改一下:
package main
import (
"fmt"
)
func main() {
a := 77
fmt.Println(a)
a := 77
fmt.Println(a)
}
我会收到错误“左侧没有新变量:=
“。 为什么这个?
这里有几件事。首先让我们解决您问题的后半部分。
声明变量的默认方法是使用var
关键字,然后用=
操作员。
var a int
a = 77
Go 为我们提供了一条捷径:=
既声明变量又赋值
a := 77
在你的例子中,当你使用:=
第二次尝试重新声明名为的新变量a
在同一范围内是不允许的。错误no new variables on left side of :=
正在试图告诉你这一点。
但现在回到你最初的问题,为什么你可以在 for 循环中多次执行此操作?
原因是每次输入一段花括号{}
您正在创建一个新的嵌套范围。当你声明变量时x
在循环顶部它是一个新变量,并且在循环结束时超出范围。当程序再次回到循环顶部时,它是另一个新范围。
例如看看这段代码
{
x := 77
fmt.Println(x)
}
fmt.Println(x) // Compile error
那一秒Println
失败是因为x
不存在于该范围内。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)