go语言的闭包

闭包其实是匿名函数,不过与一般匿名函数不同,它要引用外部变量。

go 复制代码
package main
import "fmt"

func getSum() func(int)(int){
	var sum int = 0
	return func(x int) int{
		sum += x
		return sum
	}
}
func main(){
	f := getSum()
	fmt.Println(f(1))
	fmt.Println(f(2))


}

引用的外部变量是sum,每执行一次,sum的初始值并不是0,它会不断变化。所以要实现闭包,必须在匿名函数内不断修改sum的值。

不用闭包的版本

go 复制代码
package main
import "fmt"


func getSum(preSum int,x int) int {
	sum := 0
	sum = preSum + x
	return sum 
}
func main(){
	fmt.Println(getSum(0,1))
	fmt.Println(getSum(getSum(0,1),2))


}

可以看到函数需要两个参数,而闭包只需要一个。显然不用闭包就比较麻烦了。

相关推荐
AitTech几秒前
C#编程:List.ForEach与foreach循环的深度对比
开发语言·c#·list
阿俊仔(摸鱼版)15 分钟前
Python 常用运维模块之OS模块篇
运维·开发语言·python·云服务器
军训猫猫头16 分钟前
56.命令绑定 C#例子 WPF例子
开发语言·c#·wpf
sunly_23 分钟前
Flutter:自定义Tab切换,订单列表页tab,tab吸顶
开发语言·javascript·flutter
远方 hi33 分钟前
linux虚拟机连接不上Xshell
开发语言·php·apache
涛ing42 分钟前
23. C语言 文件操作详解
java·linux·c语言·开发语言·c++·vscode·vim
NoneCoder43 分钟前
JavaScript系列(42)--路由系统实现详解
开发语言·javascript·网络
半桔1 小时前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git
九离十1 小时前
C语言教程——文件处理(1)
c语言·开发语言
小高不明1 小时前
仿 RabbitMQ 的消息队列3(实战项目)
java·开发语言·spring·rabbitmq·mybatis