Go/函数/匿名函数-闭包

## 匿名函数作为一个闭包,闭包以引用传递的方式捕获外部变量

package main

import "fmt"

func test(){
	a := 22
	str := "go"

	//匿名函数,闭包 以引用传递方式捕获外部变量
	func(){
		a = 23
		str = "gogo"
		fmt.Println(a,str)
	}() //直接调用匿名函数

	fmt.Println(a,str)
}

func main() {
	a := 33

	//定义匿名函数
	f1 := func(){
		fmt.Printf("访问匿名函数作用域之外的变量//闭包//,a=%d \n",a);
	}
	f1() //调用匿名函数

	type FuncType func ()
	var f2 FuncType = f1
	f2()

	//定义并直接调用匿名函数
	func(){
		fmt.Printf("访问匿名函数作用域之外的变量//闭包//,a=%d \n",a);
	}()

	x,y := func (i,j int) (c,d int){
		c = i+a
		d = j+a
		return
	}(1,2)
	fmt.Println(x,y)

	test()
}

##  闭包可以作为函数返回值  闭包离开作用域,其捕获的外部变量才会销毁

package main

import "fmt"

//返回值为匿名函数
func test() func () int {
	var i int 			//默认值0
	return func() int{
		i++
		return i*i
	}
}

func main() {
	f := test()			//f为一个匿名函数
	fmt.Println(f())	        //1*1
	fmt.Println(f())	        //2*2
	fmt.Println(f())	        //3*3
	//只有闭包f离开作用域main,其捕获的变量i才会销毁
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值