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


}

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

相关推荐
南宫萧幕14 小时前
基于 MATLAB 的插电混动汽车 CD-CS 策略 WLTC 前向仿真实现
开发语言·matlab·汽车
代钦塔拉14 小时前
第一篇:工业级 C++/Qt 项目头文件包含原则:告别循环依赖与编译玄学
开发语言·c++·qt
谷雨不太卷14 小时前
Linux基础IO
java·开发语言
神仙别闹15 小时前
基于PHP+MySQL实现在线考试系统
开发语言·mysql·php
fanzhonghong15 小时前
javaWeb开发之Maven高级
java·开发语言·spring boot·spring cloud·私服
luck_bor15 小时前
Lambda表达式 算法异常
java·开发语言
lsx20240615 小时前
SOAP Envelope 元素
开发语言
范范@15 小时前
day2-python基础语法
开发语言·python
qq_25183645715 小时前
基于java 私厨美食共享平台系统设计与实现(有源码)
java·开发语言·美食
杜子不疼.15 小时前
【C++ 在线五子棋对战】 - 工具类模块实现
开发语言·c++