变量重复声明和变量重名不是一个事情,上篇讲的是前者,这一篇讲后者。变量重名按照作用域进行屏蔽,查找过程从小作用域查到大作用域。
作用域最大的用处,就是对程序实体的访问权限的控制。
package main
import "fmt"
var block = "package"
func main() {
fmt.Printf("The block is %s.\n", block)//The block is package.
block := "function"
{
block := "inner"
fmt.Printf("The block is %s.\n", block)//The block is inner.
}
fmt.Printf("The block is %s.\n", block)//The block is function.
}
)