Go - 閉包
閉包
Go語言中閉包是引用了自由變數的函式,被引用的自由變數和函式一同存在,即使已經離開了自由變數的環境也不會被釋放或者刪除,在閉包中可以繼續使用這個自由變數,因此,簡單的說:
函式 + 引用環境 = 閉包
函式本身不儲存任何資訊,只有與引用環境結合後形成的閉包才具有“記憶性”,函式是編譯期靜態的概念,而閉包是執行期動態的概念 閉包對環境中變數的引用過程也可以被稱為“捕獲”,在 C++11 標準中,捕獲有兩種型別,分別是引用和複製,可以改變引用的原值叫做“引用捕獲”,捕獲的過程值被複制到閉包中使用叫做“複製捕獲”。
func main() {
s := "主函式的變數"
//fun 做為一個變數,可以傳到任何地址,同時也把變數【s】 捕獲出去
//捕獲到閉包中的變數讓閉包本身擁有了記憶效應,【s】變數會跟隨閉包生命期一直存在
fun := func() {
s = "在閉包內,捕獲了主函式的變數,並修改了"
}
fun()
fmt.Println(s) //在閉包內,捕獲了主函式的變數,並修改了
//返回一個閉包函式,有了記憶的功能
acc := closureTest()
fmt.Println(acc()) //1
fmt.Println(acc()) //2
fmt.Println(acc()) //3
}
func closureTest() func() int {
localVar := 0
//返回一個閉包
return func() int {
localVar++
return localVar
}
}
「其他文章」