015_go语言中的闭包

代码演示

package main

import "fmt"

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

func main() {
	nextInt := intSeq()

	fmt.Println(nextInt())
	fmt.Println(nextInt())
	fmt.Println(nextInt())

	newInts := intSeq()
	fmt.Println(newInts())
}

代码运行结果

1
2
3
1

代码解读:

  • go语言支持匿名函数,可以用来构造闭包
  • 第一段创集了一个intSeq函数,intSeq函数返回另一个在intSeq函数体内定义的匿名函数。这个返回的函数使用闭包的方式隐藏变量i
  • 当调用intSeq函数时,将返回值(一个函数)赋给nextInt。这个函数的值包含了自己的值i,这样在每次调用nextInt时都会更新i的值
  • 闭包这个状态对于特定的函数是唯一的,后面重新创建newInts并测试
posted @ 2018-03-30 18:52  Joestar  阅读(112)  评论(0编辑  收藏  举报