实例学习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
}

 

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