Go 语言函数闭包


Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。

以下实例中,我们创建了函数 getSequence() ,返回另外一个函数。该函数的目的是在闭包中递增 i 变量,代码如下:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func getSequence() func() int {
  6. i:=0
  7. return func() int {
  8. i+=1
  9. return i
  10. }
  11. }
  12.  
  13. func main(){
  14. /* nextNumber 为一个函数,函数 i 为 0 */
  15. nextNumber := getSequence()
  16.  
  17. /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
  18. fmt.Println(nextNumber())
  19. fmt.Println(nextNumber())
  20. fmt.Println(nextNumber())
  21. /* 创建新的函数 nextNumber1,并查看结果 */
  22. nextNumber1 := getSequence()
  23. fmt.Println(nextNumber1())
  24. fmt.Println(nextNumber1())
  25. }

以上代码执行结果为:

  1. 1
  2. 2
  3. 3
  4. 1
  5. 2