golang的词汇范围?

pau*_*kon 3 go

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

func main (){
    z := 4
    if true {
        z := 2
        fmt.Println(z)
    }
    fmt.Println(z) // prints 4
}
Run Code Online (Sandbox Code Playgroud)

jma*_*ney 11

z正在变得阴影.更改:==,它会工作.

func main (){
    z := 4
    if true {
        z = 2
        fmt.Println(z)
    }
    fmt.Println(z) // prints 2
}
Run Code Online (Sandbox Code Playgroud)

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