Lexical scoping in golang?

huangapple go评论82阅读模式
英文:

Lexical scoping in golang?

问题

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

func main() {
    z := 4
    if true {
        z := 2
        fmt.Println(z)
    }
    fmt.Println(z) // 输出4
}
英文:

I don't quite understand why a is not 2 at the end:

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

答案1

得分: 11

z正在被屏蔽。将:=更改为=,它就会正常工作。

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

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

英文:

z is getting shadowed. Change := to = and it will work.

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

The if statement has its own scope, when you used := you declared a new variable and shadowed the old one.

答案2

得分: 0

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

你需要使用分号 ; 而不是逗号:

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

This does not even compile (I was answering the unedited version of the question).

You have to use ; instead of ,:

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

huangapple
  • 本文由 发表于 2015年2月7日 07:04:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/28376340.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定