golang的作用域和变量名重名覆盖问题

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语言的编译器就会报错了

再考虑是否会从导入的其他包中查找

猜你喜欢

转载自blog.csdn.net/u010412301/article/details/84960795