【go】闭包

闭包的概念

闭包是很多语言中都有的一个概念。一般来说,函数的变量作用域最好跟函数作用域一样。但是某些时候,可能会发生,内部函数要访问外部函数中的变量。

这个时候就产生了闭包。

package main

import "fmt"

// 定义了函数adder,返回类型是一个函数
func adder() func(int) int {
	sum := 0
        
        // 这个匿名函数中引用了外部函数adder的变量,所以,这个匿名函数是一个闭包
	return func(x int) int {
		sum += x
		return sum
	}
}

func main() {
	pos, neg := adder(), adder()
	for i := 0; i < 10; i++ {
		fmt.Println(
			pos(i),
			neg(-2*i),
		)
	}
}

2 闭包的作用

  1. 访问外部函数的变量
  2. 做函数工厂,可以动态产生多种函数,比如上面的例子中,在main函数中,用两个变量pos,neg命名了那个匿名函数,调用的时候分别使用pos(i),neg(-2*i)于是就产生了两个不同的函数
posted @ 2023-05-15 16:19  wenli7363  阅读(6)  评论(0编辑  收藏  举报