GO语言基础教程(86)Go函数之闭包:Go语言闭包全解析:从萌新到大佬的必经之路

掌握闭包,让你的Go代码瞬间提升逼格

什么是闭包?为什么它如此重要?

如果你对Go语言的函数理解还停留在“输入-处理-输出”的初级阶段,那么闭包将会彻底改变你的认知。闭包,说白了就是**“有记忆的函数”**,它可以记住自己诞生时的环境,即使离开了这个环境,依然能访问和操作当时的变量。

这听起来有点神奇,对吧?来看一个简单例子:

func counter() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

func main() {
    c := counter()
    fmt.Println(c()) // 输出 1
    fmt.Println(c()) // 输出 2
    fmt.Println(c()) // 输出 3
}

看到没有?虽然counter函数每次调用后已经执行完毕,但内部的变量i并没有消失,而是被返回的匿名函数“捕获”了。这就是闭包的魔力——状态保持

闭包的本质是函数 + 引用环境的组合。它不仅仅是一个函数,还附带了一个小小的“存储空间”,用来保存外部函数的变量。

闭包基础:从匿名函数到闭包

匿名函数:闭包的基础

在深入了解闭包之前,我们先来看看匿名函数——闭包的基础构建块。

匿名函数,顾名思义就是没有名字的函数,你可以直接定义并使用它:

// 定义后立即执行
result := func(a, b int) int {
    return a + b
}(3, 5)
fmt.Println("结果:", result) // 输出:结果:8

// 赋值给变量使用
add := func(x, y int) int {
    return x + y
}
fmt.Println(add(10, 20)) // 输出:30

匿名函数让代码更加灵活,可以随时随地定义使用,不需要像传统函数那样必须先声明再使用。

闭包的诞生

当匿名函数开始引用外部变量时,它就升级成了闭包:

func main() {
    a := 10

    add := func(x int) int {
        return a + x  // 闭包:引用了外部变量 a
    }

    fmt.Println(add(5)) // 输出 15
}

在这个例子中,匿名函数捕获了外部变量a,即使a超出了原本的作用域,只要add还存在,a就会一直活着。

闭包的经典应用场景

闭包不仅仅是一个学术概念,它在实际开发中有大量应用。让我们来看几个最常见的场景。

1. 状态保持器:让函数有“记忆”

闭包最常见的用途就是保存状态,比如实现计数器、累加器等:

func getAdder() func(int) int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值