我有以下程序.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 2; i++ {
x := 77
fmt.Println(x)
}
}
Run Code Online (Sandbox Code Playgroud)
执行时,我得到:
77
77
Run Code Online (Sandbox Code Playgroud)
我们可以看到,x := 77
已经执行了2次.但是,如果我稍微修改它:
package main
import (
"fmt"
)
func main() {
a := 77
fmt.Println(a)
a := 77
fmt.Println(a)
}
Run Code Online (Sandbox Code Playgroud)
我将得到错误"左侧没有新变量:=
".为什么这个?有人可以帮忙解释一下吗?提前致谢.
jcb*_*lkr 12
这里有几件事.首先让我们解决你问题的后半部分.
声明变量的默认方式是使用var
关键字,然后使用=
运算符分配给它.
var a int
a = 77
Run Code Online (Sandbox Code Playgroud)
Go允许我们使用快捷方式:=
来声明变量并赋值
a := 77
Run Code Online (Sandbox Code Playgroud)
在您的示例中,当您:=
第二次使用时,您尝试重新声明a
在同一范围内命名的新变量,这是不允许的.错误no new variables on left side of :=
是试图告诉你这个.
但是现在问到你原来的问题,为什么你能在for循环中多次这样做?
原因是每次进入花括号块时,{}
您都在创建一个新的嵌套范围.当您x
在循环顶部声明变量时,它是一个新变量,并且在循环结束时超出范围.当程序再次回到循环的顶部时,它是另一个新的范围.
例如,看看这段代码
{
x := 77
fmt.Println(x)
}
fmt.Println(x) // Compile error
Run Code Online (Sandbox Code Playgroud)
第二个Println
失败,因为x
在该范围内不存在.
归档时间: |
|
查看次数: |
4904 次 |
最近记录: |