逃逸的一种情况

来源:9-3 GO 的堆内存结构是怎样的?(1)

慕仔9573397

2022-08-10

func adder() func(int) int {
	num := 0
	return func(n int) int {
		num += n
		return num
	}
}

func main() {
	incr := adder()
	fmt.Println(incr(1))
	fmt.Println(incr(1))
}

// 输出:
// 1
// 2

请问老师这种闭包的情况产生的逃逸属于哪种类型的逃逸呢?

写回答

1回答

Moody

2022-08-11

简单来说就是因为返回了指针,这里的incr在代码里是一个函数,实际编译时其实是一个结构体的指针。本身这是一个语法糖。具体可以看下面这个文章。

https://zhuanlan.zhihu.com/p/360939266

0
0

深入Go底层原理,重写Redis中间件实战

深入Go语言原理+Go重写Redis

474 学习 · 172 问题

查看课程