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))


}

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

相关推荐
tanyongxi6614 分钟前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式
遗憾皆是温柔16 分钟前
24. 什么是不可变对象,好处是什么
java·开发语言·面试·学习方法
wearegogog12337 分钟前
C语言中的输入输出函数:构建程序交互的基石
c语言·开发语言·交互
Fine姐40 分钟前
The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
开发语言·网络·php·硬件架构
HAPPY酷1 小时前
给纯小白的Python操作 PDF 笔记
开发语言·python·pdf
liulilittle1 小时前
BFS寻路算法解析与实现
开发语言·c++·算法·宽度优先·寻路算法·寻路
阿珊和她的猫1 小时前
autofit.js: 自动调整HTML元素大小的JavaScript库
开发语言·javascript·html
喜欢吃燃面2 小时前
C++算法竞赛:位运算
开发语言·c++·学习·算法
草莓熊Lotso2 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他