1. 程式人生 > >golang的作用域和變數名重名覆蓋問題

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語言的編譯器就會報錯了

再考慮是否會從匯入的其他包中查詢