golang 變量作用域

局部變量

定義:在函數或者在語義塊(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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章