GoLang 變量做用域

GoLang 變量做用域

在 Golang 中,變量做用域分爲:函數

  • 本地局部變量
  • 全局變量
  • 參數變量

本地局部變量

定義:在函數或者在語義塊(if/for等)中定義的變量
生效範圍:定義在函數裏面則在整個函數範圍有效; 定義在語義塊,則在整個語義塊生效code

實例以下:作用域

//str 定義在函數內,所以它是一個本地局部變量
//str 僅僅在 Test函數內有效,出了這個函數無效
func Test(){
    str := "This is a local var"
}
// str1 定義在語義塊 for 裏面,所以它也是一個本地局部變量
// str1 僅僅在 for 循環語句裏面生效,出了這個語義塊不可見
func Test1(){
    for{
        str1 := "This is yet a local var in block"
        ...
    }
}
//if 語義塊輸出 "block var"; 末尾輸出 "local var"
//注意做用域的優先級(當變量名相同時,會優先使用當前做用域的變量)
func Test2(){
    str := "local var"
    if true {
        str := "block var"
        fmt.Println(str)
    }
    fmt.Println(str)
}

全局變量

定義:函數外部定義的變量都屬於全局變量;全局變量聲明必須以 var 開頭
生效範圍:當前 package 內,若是想要其餘 package 訪問,全局變量以大寫開頭string

//此處例子全局變量值爲20
var g int
func test(){
    a := 10
    b := 10
    //千萬不要使用 g := a+b 這個是在 main 裏面建立了一個新的局部變量 g
    g = a+b
    ...
}
//此處全局變量g1仍然爲零值 0,而同名的局部變量 g1(:= 語法是定義一個新的變量且初始化) 爲20
var g1 int
func test1(){
    a := 10
    b := 10
    g1 := a + b
}

參數變量

定義:函數調用時傳遞的變量
生效範圍:函數範圍(可是有可能會可變傳入參數的值,取決於傳遞的參數的類型)編譯

//str 是參數變量
//i 是局部變量
//二者區別:參數變量的賦值是在函數外部完成的(調用函數時);參數變量聲明後能夠不使用,局部變量聲明不使用編譯錯誤
//大部分狀況下,參數變量和局部本地變量是同樣的
func Test(str string){
    i := 1
}
相關文章
相關標籤/搜索