为什么可以使用for-loop声明相同的var两次?

时间:2015-09-25 08:36:20

标签: variables for-loop go var variable-declaration

我正在尝试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++
    }       
}

输出

  

您好

     

世界!

     

您好

     

世界!

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

short variable declaration i := ...会掩盖在for循环 block 范围之外声明的同一变量。

  

每个“if”,“for”和“switch”语句都被认为是在其自己的隐式块中

您可以在“Go gotcha #1: variable shadowing within inner scope due to use of := operator

中查看更多内容

它指的是goNuts discussion

短变量声明可以在块中重新声明相同的变量,但由于i也被声明为之外的for块,它将其值保持在所述块之外({{3} })。

答案 1 :(得分:1)

第一个i已在主函数的大括号({})内定义,第二个i在for循环的范围内声明。名称相同但范围不同。