package main
import "fmt"
var block = "package"
func main() {
block := "function"
{
block := 1
fmt.Printf("The block is %d.\n", block)
}
fmt.Printf("The block is %s.\n", block)
var a interface{}
a = 1
if a != nil {
a := "2"
fmt.Println(a)
}
fmt.Println(a)
}
The block is 1.
The block is function.
2
1
Process finished with exit code 0
1.代码引用变量时总会最优先查找当前代码块中(不包含任何子代码块)的那个变量
2.如果当前代码块中没有声明以此为名的变量,那么程序会沿着代码块的嵌套关系,一层一层的查找
3.一般情况下,程序会一直查到当前代码包代表的那层代码块。如果仍然找不到,那么go语言的编译器就会报错了
再考虑是否会从导入的其他包中查找