Go - 函数闭包



Go 编程语言支持匿名函数,这些函数可以充当函数闭包。当我们想内联定义一个函数而不向其传递任何名称时,会使用匿名函数。

在我们的示例中,我们创建了一个函数 getSequence(),该函数返回另一个函数。此函数的目的是在 upper 函数的变量 i 上平仓以形成闭包。例如 -


package main

import "fmt"

func getSequence() func() int {
	 	i:=0
	 	return func() int {
	 	 	 i+=1
	 	 	 return i 	
	 	}
}

func main(){
	 	/* nextNumber现在是一个i为0的函数 */
	 	nextNumber := getSequence() 	

	 	/* 调用nextNumber将i加1并返回相同的值 */
	 	fmt.Println(nextNumber())
	 	fmt.Println(nextNumber())
	 	fmt.Println(nextNumber())
	 	
	 	/* 创建一个新序列并查看结果,i再次为0 */
	 	nextNumber1 := getSequence() 	
	 	fmt.Println(nextNumber1())
	 	fmt.Println(nextNumber1())
}

编译并执行上述代码时,它会产生以下结果——

1
2
3
1
2