Golang閉包入門瞭解

OldBoy~發表於2018-08-17

概念
閉包就是一個函式與其相關的引用環境組成的一個整體。
閉包本質其實是一個函式,但是這個函式會用到函式外的變數,它們共同組成的整體我們叫做閉包。

簡單舉例說明

package main
import (
    "fmt"
)

//測試小程式 累加器

func AddUpper () func (int) int {
    var n int = 10
    return func (x int) int {
        n = n + x
        return n
    }
}
func main(){

    test := AddUpper() //test變數接收Addupper返回的函式

    //因為Addupper返回的結果是一個函式,test(1)傳參是1,
    //那麼其實就是把1傳參給Addupper裡的int 引數x,x在使用的時候會和外面的n相加
    //那麼x+n :1+10 =11
    fmt.Println(test(1))  //11


    //下面的結果會做說明
    fmt.Println(test(2))   //13

    fmt.Println(test(3))    //16
}
D:\goproject\src\main>go run hello.go
11
13
16

當反覆呼叫test函式時,因為n是隻初始化一次,因此每次呼叫一次就進行累計,而不會初始化。變數n永遠隱式存在於test中

進一步說明

//其實下面這塊程式碼就是一個簡單的閉包
var n int = 10
return func (x int) int {
    n = n + x
    return n
}
//返回的是一個匿名函式,但是這個匿名函式引用到了函式外的變數n,但是這個匿名函式會和這個n形成一個引用關係的整體,構成閉包

 

  

相關文章