go语言作用域(5)

请输入图片描述作用于定义标识符可以使用的范围。在go中使用{}定义作用域的范围。在{}中可以嵌套语句块。

但是,子语句快可以使用父语句块,父语句快不可以使用子语句块。如下所示就会报:undefined: inner.因为在{}外是不能调用{}内的inner := 2

    outer := 1
    {
        inner := 2
        fmt.Println(outer)
        fmt.Println(inner)
    }
    fmt.Println(inner)

子语句快可以使用父语句块

outer := 1
{
    inner := 2
    fmt.Println(outer)
    fmt.Println(inner)
    {
        inner2 := 3
        fmt.Println(outer,inner,inner2)
    }
}
//fmt.Println(inner)

运行

[root@LinuxEA /opt/Golang]# go run 05.go 
1
2
1 2 3

假如在语句块中嵌套了很多层,那么调用的流程就是就近调用。

outer := 1
{
    inner := 2
    outer := 11
    fmt.Println(outer)
    fmt.Println(inner)
    {
        inner2 := 3
        fmt.Println(outer,inner,inner2)
    }
}
fmt.Println(outer)

运行

[root@LinuxEA /opt/Golang]# go run 05.go 
11
2
11 2 3
1