go作用域

詞法作用域

var x = 42

func main() {
    fmt.Println(x)
    foo()
}

func foo() {
    fmt.Println(x)
}
  • 函數(shù)作用域
    類似閉包,因為x是全局變量
var x = 0 
func increment() int {
    x++
    return x
}

func main() {
    fmt.Println(increment())
    fmt.Println(increment())
}

閉包:

func wrapper() func() int {
    x := 0
    return func() int {
        x++
        return x
    }
}

他們之間有相似之處,因為在上面的代碼中,x本來就是全局變量,所以x一直存在,一直可以調(diào)用,但是下面的代碼中
x要想一直存在變量中,所以x必須被別人引用,且將引用x的函數(shù)返回到全局變量中,這樣就形成了閉包

  • 包的作用域
    同一包中兩個文件,之間調(diào)用,確定要在一起編譯時可以調(diào)用的

  • 代碼塊的作用域
    {}代表變量的作用域

    func main() {
    x := 1
    {
        y := 2
    }
    fmt.Println(x)
    fmt.Println(y)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容