Golang - 块和作用域

路漫漫其修远兮,吾将上下而求索。

如果在代码块中声明一个变量,在代码块外使用会产生编译错误。

示例:

1
2
3
4
5
6
7
8
9
10
11
func main() {
    var index = 5
    if index >= 0 && index < 5 {
        var describe = "index 值大于等于0且小于5"
    } else if index >= 5 && index < 10 {
        var describe = "index 值大于等于5且小于10"
    } else {
        var describe = "index 值大于等于10"
    }
    fmt.Println(describe)
}

上面这段代码将会抛出如下错误:

1
    undefined: describe (exit status 2)

作用域

声明的变量可以在其作用域内的任何地方被访问,但是如果你试图在该作用域之外访问它,就会收到一个错误。

可以将上述代码的作用域进行拆解:

第一级是 main() 函数作用域

1
2
3
func main() {
    // 这里是 main() 函数作用域
}

第二级是三个平级的条件作用域

1
2
3
4
5
6
7
if index >= 0 && index < 5 {
    // 这里是 if 作用域
} else if index >= 5 && index < 10 {
    // 这里是 else if 作用域
} else {
    // 这里是 else 作用域
}

当然在 main() 函数作用域之外还有范围更大的作用域 package 作用域。