go随聊-闭包

本文深入解析闭包这一编程概念,通过Go语言实例说明闭包如何使用外部函数的变量,并展示不同闭包间变量的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是闭包

        闭包就是一个匿名函数和一个外部变量(成员变量)组成的一个整体 ,通俗的讲就是一个匿名函数中引用了其外部函数内的一个变量而这个变量和这个匿名函数的组合就叫闭包。如下代码所示:

func inner() func() int {
	count:=0
	return func() int {
		count++
		return count
	}
}

inner函数中定义一个count变量,同时返回一个func

func Closure() {
	f1:=inner()
	a1:=f1()
	fmt.Println("f1:",a1)
	a2:=f1()
	fmt.Println("f1:",a2)
	a3:=f1()
	fmt.Println("f1:",a3)
}

Closure函数中调用inner函数,返回一个f1,然后多次调用f1() 会有什么结果呢 

f1: 1
f1: 2
f1: 3

在闭包中持有该变量的引用 而匿名函数所操作的变量一直是该闭包中的变量的引用,所以多次调用f1()函数操作的是同一个变量count,那么值逐渐增长也就不奇怪了。

如果多次调用inner获取闭包呢,会是什么情况

func Closure() {
	f1:=inner()
	a1:=f1()
	fmt.Println("f1:",a1)
	a2:=f1()
	fmt.Println("f1:",a2)
	a3:=f1()
	fmt.Println("f1:",a3)

	f2:=inner()
	a1=f2()
	fmt.Println("f2:",a1)
	a2=f2()
	fmt.Println("f2:",a2)
	a3=f2()
	fmt.Println("f2:",a3)
}
f1: 1
f1: 2
f1: 3
f2: 1
f2: 2
f2: 3

所以每个闭包中的引用变量count都是不同的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值