2015-02-06 74 views
2

我不明白爲什麼a不是2月末:golang的詞彙範圍?

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

[適用於我](https://play.golang.org/p/lZFMDGF_M_)。 – 2015-02-06 23:10:52

+0

我已更改示例以更好地解釋問題。 – paulkon 2015-02-06 23:26:34

回答

10

z越來越shadowed。將:=更改爲=,它將起作用。

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 
}