这是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)
}
}
}
答案 0 :(得分:4)
:=
运算符创建一个新变量并为其指定右侧值。
在for循环的第一次迭代中,在步骤x := x[i]
中,右侧看到的唯一x
是步骤x
中定义的x := "hello!"
。就右侧而言,x
尚未重新宣布。
一旦你在内部区域重新声明x ..
还没有。它仅在x := x[i]
之后重新宣布。
在迭代结束时,新x
的范围结束。它不会在新的迭代中重复使用。
当一个新的迭代发生时,它会再次发生同样的事情。