閉包
閉包是一個函數
函數引用 他自己之外的變量就是閉包。
閉包的根本就是
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
}