go 閉包函數&執行生命週期

package main

import "fmt"

func main() {
    /*
               函數式編程:
                      支持將函數做爲另外一個函數的參數, 叫回調函數
                      支持將函數做爲另外一個函數的返回值

        一個函數有內層函數,該內層函數中,還會操做外層函數的局部變量,(外層函數中定義,外層函數的參數)而且該外層函數的返回值就是這個內層函數
        該內層函數和局部變量,統稱閉包結構, closure 閉包函數不會隨執行結束而自動銷燬
    */
    res := increment()
    fmt.Println(res)
    //fmt.Printf("%T", res)
    fmt.Println(res())
    // 閉包生命週期
    res1 := res()
    fmt.Println(res1)
    res2 := res()
    fmt.Println(res2)
    res3 := res()
    fmt.Println(res3)

    //從新開闢內層給變量
    res4 := increment()
    res5 := res4()
    fmt.Println(res5)

}

func increment() func() int { // increment 外層函數
    i := 0
    fun := func() int {
        i++
        return i
    }
    return fun //將內層函數返回 ,本質是返回該內存函數的地址
    // return func()  // 將內層函數的執行結果 返回
}

image.png

相關文章
相關標籤/搜索