GO的闭包
闭包=函数+引用环境
1 | func f(i int) func() int { |
函数f返回了一个函数,返回的这个函数,返回的这个函数就是一个闭包。这个函数中本身是没有定义变量i的,而是引用了它所在的环境(函数f)中的变量i
将闭包函数表现为一个结构体
1 | type Closure struct { |
底层汇编上,确实闭包是一个结构体
1 | func f(i int) func() int { |
返回闭包时并不是单纯返回一个函数,而是返回了一个结构体,记录下函数返回地址和引用的环境中的变量地址