如何理解闭包函数的特性(golang版)

特性:闭包可以在多次调用之间保持原始状态

我们来看一个例子:

go 复制代码
func main() {
    adder := makeAdder(10)
    fmt.Println(adder(5))  // 输出:15,因为 10 + 5 = 15
    fmt.Println(adder(20)) // 输出:30,因为 10 + 20 =30
}
func makeAdder(base int) func(int) int {
    return func(num int) int {
        return base + num
    }
}

在这个例子中,我们可以将函数 func makeAdder(base int) func(int) int 拆成两部分,分别为:

  • func makeAdder(base int)
  • func(int) int

匿名函数 func(int) int 充当了 makeAdder 函数的返回值。

即 makeAdder 函数接收了一个整数作为参数,并返回一个匿名函数。而返回的匿名函数就是闭包函数,因为它引用了 makeAdder 函数作用域中的变量 base,这就是闭包函数的结构定义。

而在闭包函数特性这块,我们可以看到,在闭包函数里,我们首先令变量 base 的值为 10。

  • 第一次操作先对它加 5,得出的值为 15
  • 然后又加 20,得出来的值为 30 而不是 20

这说明每一次调用闭包的时候,它里面的值还是初始值。即闭包可以在多次调用之间保持原始状态

相关推荐
霸道流氓气质1 分钟前
SpringBoot+LangChain4j+Ollama实现Function Calling工具调用-仿智能客服示例
java·spring boot·后端
Ulyanov13 分钟前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio组件化开发与UI组件库构建
开发语言·python·qt·ui·雷达电子战系统仿真
词元Max14 分钟前
2.8 pydantic 数据校验:AI 开发的隐形利器
开发语言·人工智能·python
2401_8653825018 分钟前
各省政务信息化项目验收材料清单汇总及差异分析
java·开发语言·数据库
froginwe1122 分钟前
MySQL 删除数据库
开发语言
Rust研习社22 分钟前
深入浅出 Rust 泛型:从入门到实战
开发语言·后端·算法·rust
许彰午33 分钟前
源码全开放,没人看——一个框架作者的真实经历
java·后端
YGY顾n凡39 分钟前
我开源了一个项目:一句话创造一个AI世界!
前端·后端·aigc
旷世奇才李先生41 分钟前
Python爬虫实战:多线程爬取\+数据清洗\+可视化(附完整源码)
开发语言·爬虫·python
郭涤生43 分钟前
C++ 回调较容易出错问题
开发语言·c++