go 短宣告與作用域
阿新 • • 發佈:2019-02-20
1、if,for,switch 的短宣告和控制語句塊({}包含部分),是巢狀的內外作用域(else if 是緊跟的 if 的內部作用域,並非相同的作用域);獨立於外部作用域。
func main() {
x := 6 //1
if x:= 3; x > 4{ //2
fmt.Println("x is greater than", x)
}else if x:= 5; x < 6{ //3
fmt.Println("x is smaller than", x)
}
fmt.Println(x)
}
1,2,3 處的三個 x 處於三個巢狀的作用域,是三個不同的 x:1在2的外層,2在3的外層。所以輸出是
x is smaller than 5
6
func main() {
x := 4 //1
if x:= 3; x > 4{ //2
fmt.Println("x is greater than", x)
}else if x:= 5; x < 6{ //3
x := 7
fmt.Println("x is smaller than", x)
}
fmt.Println(x)
}
if 的短宣告和 if 的控制塊,是內外作用域。內部遮蔽外部,所以輸出是
x is smaller than 7
6
2、函式的引數和返回值與函式體,是相同的作用域;獨立於外部作用域。
func f(s int) (r int){
s := 3 //由於引數和返回值和函式體在相同作用域,所以這裡段宣告重複定義了,構建報錯
r := 3 //同上
fmt.Println(s)
return
}
3、短宣告總是會在當前作用域建立新的變數;如果當前作用域已經有同名變數,將構建錯誤。