这是来自GOPL的示例-“表达式x [i]和x +’A’-‘a’分别引用外部块中x的声明;我们稍后将对此进行解释。”
解释永远不会到来。为什么x [i]引用外部范围中的x?只要在内部块中重新声明x,它就应该在外部块中遮盖x。为什么这样做?
package main import "fmt" func main() { x := "hello!" for i := 0; i < len(x); i++ { x := x[i] if x != '!' { x := x + 'A' - 'a' fmt.Printf("%c", x) } } }
http://play.golang.org/p/NQxfkTeGzA
:= 运算符创建一个新变量,并为其分配右侧值。
:=
在for循环的第一个迭代中,在步骤中x := x[i],仅x右手边看到的是x在步骤中定义的x := "hello!"。就右侧而言,x尚未重新声明。
x := x[i]
x
x := "hello!"
一旦在内部块中重新声明x。
它 是 目前还没有。仅在之后才重新声明x := x[i]。
在迭代结束时,new x的作用域结束。它不会在新的迭代中重用。
当一个新的迭代发生时,同样的事情又重新发生了。