Go语言中闭包的解释与示例

寅恪光潜
领域专家: 人工智能技术领域
2022-11-18 11:09:20
加精

对于闭包的中文含义,我们可以这样去理解,就是内部变量,正常来说是外部不能访问到的,除非是声明为全局变量,但是全局变量存在很多缺点,比如生命周期长,一直占据着内存,既然是全局,所以所有的函数都是可以访问它,这对于有bug的情况,维护要困难,而且名称多了也容易造成重复的bug,为了解决这个缺点,我们使用到了闭包,可以访问函数内部的变量,能够将函数内部和函数外部连接起来。很多语言都有支持的,我们来看下go语言中的闭包
实际代码中,就是函数里面新建一个函数,新建的函数可以访问外面的函数中的变量,举个示例:

package main

import "fmt"

func test1() func() int {
	i := 22
	return func() int {
		i *= 2
		return i
	}
}
func main() {
	t := test1()
	for i := 0; i < 3; i++ {
		fmt.Println(t())
	}
}
/*
44
88
176
*/

这个例子中的test1函数里面有个匿名函数,匿名函数中可以访问它外面的i变量,换种理解思路就是说,匿名函数跟外面的变量等一起都属于test1函数,打包给了这个函数一样,这个就是闭包的概念。
再看个带参数的例子巩固下:

package main

import "fmt"

func test2() func(a1 int) int {
	i := 22
	return func(a1 int) int {
		i = i * a1
		return i
	}
}
func main() {
	t := test2()
	for i := 0; i < 3; i++ {
		fmt.Println(t(3))
	}
}
/*
66
198
594
*/

关于闭包等其他GO中特性可以访问:Go语言进阶,闭包、指针、并发

...全文
37 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

198

社区成员

发帖
与我相关
我的任务
社区描述
从零开始的小白到进阶成技术达人。 一起学习,一起进步。
golanggo1.19 个人社区 贵州省·贵阳市
社区管理员
  • 寅恪光潜
  • 网络豆
  • Somnus_小凯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Go语言集各语言优势之大成,从基础到进阶

一起学习,一起进步,成为技术达人!

试试用AI创作助手写篇文章吧