闭包
Go的函数声明只能在最外层,不可以在函数内申明另一个函数,但可以在函数中声明另一个函数类型的变量,也即闭包–closure。
package main
import "fmt"
func main() {
say := func(hi string) func(string) string {
return func(name string) string {
return hi + " " + name
}
}
sayHi := say("Hi")
fmt.Println(sayHi("World"))
}//本段代码借鉴了《Go语言云动力》中闭包章节处的代码
say即一个closure闭包。
堆
在程序中,hi
这个闭包的外围变量在第一个return
之后依旧可用,原因在于hi
被分配在堆上。
对不会随函数返回小时,而是在用完之后被垃圾回收。
当然,个人对于内存分配了解不多,按照Search结果,简单介绍一下:
堆与栈的区别
堆heap:
由人分配释放,若人不释放,则由OS回收
栈stack:
由编译器自动分配释放,存放函数参数值、局部变量等。
The Original Link: http://baham.github.io/12_04_bi-bao-closureyu-dui-heap.html
If you want to reprint it, please do under the CC BY-NC-SA 4.0