golang的词汇范围?

时间:2015-02-06 23:04:37

标签: go

我不太明白为什么a最后不是2:

func main (){
    z := 4
    if true {
        z := 2
        fmt.Println(z)
    }
    fmt.Println(z) // prints 4
}

2 个答案:

答案 0 :(得分:11)

z正在获得shadowed。将:=更改为=即可。

func main (){
    z := 4
    if true {
        z = 2
        fmt.Println(z)
    }
    fmt.Println(z) // prints 2
}

if语句有自己的范围,当你使用:=时,你声明了一个新变量,并将旧变量隐藏起来。

答案 1 :(得分:0)

这甚至没有编译(我正在回答问题的未经编辑的版本)。

您必须使用;代替,

func main(){
  a := 0
  for i := 0; i < 10; i++ {
    a += 5
  }
  fmt.Println(a) // prints 50
}