浅谈 Go 语言作用域
package main
import "fmt"
var block = "package"
func main() {
block := "function"
{
// := 会声明一个新变量并且将其初始化
block := "inner"
fmt.Printf("The block is %s.\n", block)
}
fmt.Printf("The block is %s.\n", block)
}
输出
The block is inner.
The block is function.
在这里 block := "inner" 等价于 var block = "inner",它声明了一个新变量并且将其初始化。
在 {} 这个代码块中新的变量 block 和main 中声明的 block 名称相同。
- 在
{}这个代码块中,它的优先级更高。 - 它的作用范围只在
{}这个代码块中。
package main
import "fmt"
var block = "package"
func main() {
block := "function"
{
// = 会覆盖 block
block = "inner"
fmt.Printf("The block is %s.\n", block)
}
fmt.Printf("The block is %s.\n", block)
}
输出
The block is inner.
The block is inner.
这种情况很好理解:在 {} 这个代码块中,使用 = 改变了变量 block 的值。