这里有几件事。首先,让我们解决您问题的下半部分。
声明变量的默认方法是使用
var关键字,然后由
=运算符分配给它。
var a inta = 77
Go为我们提供了一个快捷方式
:=,既可以声明变量也可以分配值
a := 77
在您的示例中,当您
:=第二次使用时,您试图重新声明一个
a在相同作用域内命名的新变量,这是不允许的。错误
no new variables onleft side of :=试图告诉您这一点。
但是现在您的原始问题是,为什么您可以在for循环中多次执行此操作?
原因是每次您输入大括号
{}都在创建新的嵌套范围。当您x在循环顶部声明变量时,它是一个新变量,并且在循环结束时超出范围。当程序再次回到循环顶部时,这是另一个新作用域。
例如看这段代码
{ x := 77 fmt.Println(x)}fmt.Println(x) // Compile error第二个
Println失败,因为
x在该范围内不存在。



