我正在尝试Go http://tour.golang.org/,我看到可以使用:= in for循环声明两次相同的var。 输出与Go编译器相同。
这是我的测试:(参见var i,它被宣布了两次)
package main
import "fmt"
func main() {
i := "Hello"
a := 0
for a < 2 {
fmt.Println(i)
i := "World !"
fmt.Println(i)
a++
}
}
输出
您好
世界!
您好
世界!
有人可以解释一下吗?
答案 0 :(得分:3)
short variable declaration i := ...
会掩盖在for
循环 block 范围之外声明的同一变量。
您可以在“Go gotcha #1: variable shadowing within inner scope due to use of :=
operator”
它指的是goNuts discussion。
短变量声明可以在块中重新声明相同的变量,但由于i
也被声明为在之外的for块,它将其值保持在所述块之外({{3} })。
答案 1 :(得分:1)
第一个i已在主函数的大括号({})内定义,第二个i在for循环的范围内声明。名称相同但范围不同。