go变量范围和阴影

go变量范围和阴影,go,Go,这是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] i

这是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)
        }
    }
}
主程序包
输入“fmt”
func main(){
x:=“你好!”
对于i:=0;i

:=
运算符创建一个新变量,并为其分配右侧值

在for循环的第一次迭代中,在步骤
x:=x[i]
中,右手边看到的唯一
x
是在步骤
x:=“hello!”
中定义的
x
。就右侧所见,
x
尚未重新声明

只要你在内部块中重新声明x

现在还没有。其仅在
x:=x[i]
之后重新声明

在迭代结束时,新的
x
范围结束。它不会在新的迭代中重用


当一个新的迭代发生时,同样的事情再次发生。

Ah所以循环的每个迭代都是一个新的范围。