• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    浅谈go语言闭包的立即执行和不立即执行

    发布者: 怀卉1097 | 发布时间: 2025-8-14 08:50| 查看数: 95| 评论数: 0|帖子模式

    在 Go 语言中,闭包(closure)是一种特殊的函数,它可以访问其定义时所在的作用域中的变量,即使这个函数在其他地方被调用。闭包的“立即执行”和“不立即执行”主要取决于闭包的定义和调用方式。

    1. 闭包的定义

    闭包是一种函数,它捕获了其定义时所在的作用域中的变量。例如:
    1. func makeAdder(base int) func(int) int {
    2.     return func(delta int) int {
    3.         return base + delta
    4.     }
    5. }
    复制代码
    在这个例子中,makeAdder 返回了一个闭包,这个闭包可以访问其定义时的 base 变量

    2. 不立即执行的闭包

    不立即执行的闭包是指定义了闭包,但在后续某个时刻才调用它。例如:
    1. func main() {
    2.     adder := makeAdder(10) // 定义闭包
    3.     fmt.Println(adder(5))  // 调用闭包,输出 15
    4. }
    复制代码
    在这个例子中,makeAdder(10) 返回了一个闭包,但并没有立即执行它。我们将其赋值给变量 adder,然后在后续调用 adder(5) 时才执行闭包。

    3. 立即执行的闭包

    立即执行的闭包是指在定义闭包的同时立即调用它。这种用法在 Go 中并不常见,但在某些场景下可能会用到。例如:
    1. func main() {
    2.     result := func(base int) func(int) int {
    3.         return func(delta int) int {
    4.             return base + delta
    5.         }
    6.     }(10)(5) // 定义并立即执行闭包
    7.     fmt.Println(result) // 输出 15
    8. }
    复制代码
    在这个例子中,func(base int) func(int) int 是一个返回闭包的函数,我们在定义它的同时,立即传入参数 10 并调用了返回的闭包,传入参数 5,最终输出结果。

    4. 匿名函数的立即执行

    在 Go 中,匿名函数也可以立即执行,这与闭包的立即执行类似。例如:
    1. func main() {
    2.     result := func() int {
    3.         return 42
    4.     }()
    5.     fmt.Println(result) // 输出 42
    6. }
    复制代码
    这里定义了一个匿名函数 func() int,并在定义的同时通过 () 立即调用了它。

    总结


    不立即执行的闭包:

    定义闭包后,将其存储在变量中,后续再调用。

    立即执行的闭包:

    在定义闭包的同时立即调用它,通常用于一些特殊场景,如初始化操作或简化代码逻辑。
    在实际开发中,不立即执行的闭包更为常见,因为它们可以被多次调用,利用闭包捕获的变量来实现一些灵活的功能
    到此这篇关于浅谈go语言闭包的立即执行和不立即执行的文章就介绍到这了,更多相关go语言闭包立即执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表