21、闭包

1.闭包的概念

Go语言中支持将一个函数作为另一个函数的返回值,这样就形成了闭包的结构

闭包(closure)
一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的参数或者外层函数中直接定义的变量),并且该外层函数的返回值就是这个内层函数

这个内层函数和外城函数的局部变量,统称为闭包

  • 局部变量的生命周期会发生变化,正常的局部变量随着函数的调用而创建,随着函数的结束而销毁
  • 但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还要继续使用
/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/5/15  21:42
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	// 调用函数
	fun1 := increment()
	fmt.Printf("%T\n", fun1)
	res := fun1()
	fmt.Printf("%T\n", res)
	fmt.Println(res)

	res2 := fun1()
	fmt.Println(res2)

	res3 := fun1()
	fmt.Println(res3)

	fun2 := increment()
	fmt.Println(fun2())
	fmt.Println(fun2())
	fmt.Println(fun2())
}
func increment() func() int { // 外层函数
	i := 0
	return func() int { // 内层函数
		i++
		fmt.Println("i:", i)
		return i
	}
	// return 返回内存函数
}
posted @   我也有梦想呀  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示