Golang中的词法作用域?

3

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

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

这对我有效 - user142162
我已经修改了示例以更好地解释问题。 - paulkon
2个回答

11

z遮蔽了。将:=改为=,它就会正常工作。

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

if语句有其自己的作用域,当你使用:=时,你声明了一个新变量并遮蔽了旧变量。


0

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

你必须使用 ; 而不是 ,

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接