實例學習Golang--閉包

閉包

閉包是一個函數

函數引用 他自己之外的變量就是閉包。

閉包的根本就是

1, 函數可以作爲參數或者返回值
 2, 理解變量的作用域

最簡單的閉包:

package main
//函數返回引用了外部變量 i 的閉包
func a(i int) func () {
    return func() {
        fmt.Println(i)
    }
}
func main() {
    f := a (1)
    f ()
}

實例: 

package main

import "fmt"

// 沒有參數 沒有返回值
func f() {
	fmt.Println("hello f")
}

// 沒有參數的函數作爲參數, 沒有返回值
func f1(f func()) {
	fmt.Println("hello f1")
	f()
}

// int int 作爲參數,沒有返回值
// 此時 f2 不能作爲參數傳入 f1
func f2(x, y int) {
	fmt.Println("hello f2 and x + y = ", x+y)
}

// 閉包,x, y 屬於 f3, 但是可以給 f使用,返回沒有參數和返回值的函數類型
func f3(f func(int, int), x, y int) func() {
	return func() {
		f(x, y)
	}
}

func main() {
	f1(f)
	// hello f1
	// hello f

	retFunc := f3(f2, 1, 2)
	f1(retFunc)
	//hello f1
	//hello f2 and x + y =  3
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章