package mainimport ( "fmt")func main() { f := k(11) //调用k函数 fmt.Println(f(1)) fmt.Println(f(2))}func k(x int) func(int) int { //输入x为Int型,返回一个函数func参数为Int,返回值为int return func(y int) int { //func参数为Int返回值为Int return x + y //返回x+y的值 }}
闭包是函数以及相关函数引用环境的集合:闭包=函数+引用环境
例如上面那段代码中:k(x int)就是函数,return 部分就是引用环境
在闭包中所调用的变量中总是指向底层内存地址。譬如上述代码中的x,除非改变f:=k(11)中调用参数的值,那么地址是不会改变的。
func k(x int) func(int) int { fmt.Printf("%p",x) //0x118e00e0 return func(y int) int { fmt.Printf("%p",x) //0x118e00e0 return x + y }
参考资料:
(go闭包遐想) https://gobyexample.com/closures (go closure)