为什么我可以在for循环中多次重定义相同的变量,但不能在循环外?

我有以下程序。

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在该范围内不存在。

以上是 为什么我可以在for循环中多次重定义相同的变量,但不能在循环外? 的全部内容, 来源链接: utcz.com/qa/413301.html

回到顶部