局部變量
定義:在函數或者在語義塊(if/for等)中定義的變量
生效範圍:定義在函數裏面則在整個函數範圍有效; 定義在語義塊,則在整個語義塊生效
實例:
// str定義在函數內,是一個局部變量,僅在Test函數內有效
func Test(){
str := "This is a local var"
}
// str1定義在語義塊 for 裏面,是一個局部變量
// 循環變量i也屬於for語義塊內聲名的,也是局部變量,僅在循環內部有效
func Test1(){
for i:=0; i<100; i++ {
str1 := "This is yet a local var in block"
...
}
}
// if 語義塊輸出 "block var"; 末尾輸出 "local var"
// 注意作用域的優先級(當變量名相同時,會優先使用當前作用域的變量)
// 同時,if條件語句可以先執行一個語句,其中聲名的condition也是if語義塊內的局部變量
func Test2(){
str := "local var"
if condition:=true; condition {
str := "block var"
fmt.Println(str)
}
fmt.Println(str)
}
全局變量
定義:函數外部定義的變量都屬於全局變量;全局變量聲明必須以 var 開頭
生效範圍:當前 package 內,如果想要其他 package 訪問,全局變量以大寫開頭
實例:
//此處例子全局變量值爲20
var g int
func test(){
a := 10
b := 10
// 使用 g := a+b 則是在test裏面創建了一個新的局部變量 g
g = a+b
...
}
//此處全局變量g1仍然爲零值 0,而同名的局部變量 g1爲20
var g1 int
func test1(){
a := 10
b := 10
g1 := a + b
}
var G int // 此變量可被包外訪問
參數變量
定義:函數調用時傳遞的變量
生效範圍:函數範圍(但是有可能會可變傳入參數的值,取決於傳遞的參數的類型)
實例:
//str 是參數變量
//i 是局部變量
//兩者區別:參數變量的賦值是在函數外部完成的(調用函數時);參數變量聲明後可以不使用,局部變量聲明不使用編譯錯誤
//大部分情況下,參數變量和局部本地變量是一樣的
func Test(str string){
i := 1
}