函数在Go中的作用:
参数、返回值、绑定到变量。我们称之为function value
函数——编译——->代码段(函数指令)
function value本质是一个指针
——->指向runtime.funcval结构体(存了个地址)
——->指向函数指令入口
一个变量存着一个地址,这个地址存了一个地址
为什么需要二级地址呢?
为了处理闭包。
1.什么是闭包
自由变量(函数外定义,函数内使用)
脱离上下文,也能使用自由变量
捕获变量
Go语言中闭包是有捕获列表的Function Value
2.闭包有什么用
sort.Slice
大部分地方都可以用闭包
最典型的比如,用于返回值是一个函数的函数,比如各种http 的 middleware。
再比如go 一个 goroutines。
闭包一个典型的优势是可以在函数范围之外,调用函数内部的变量。
Go中的闭包无所不在.
Go中所有的函数和方法 (除了内置函数) 都可以看作是闭包.
这是为什么Go做为一个静态语言, 却和动态语言一样灵活.