闭包函数
闭包函数
/* 返回函数的函数 闭包可以保存内部函数的状态数据 正常函数结束后,声明的变量会被系统回收,没有闭包时,只能借助全局变量来保存函数的状态数据,这样有很多问题。 */
行军例子
1 package main 2 import "fmt" 3 4 //函数可以重复调用,变量数值不会因为第一次调用的进度而改变。 5 func main(){ 6 7 //获得武松和鲁智深各自的【闭包内层函数】,闭包的作用是【保存各自的内存函数状态】 8 f1 := GetTaskFunc() 9 f2 := GetTaskFunc() 10 11 //武松和鲁智深执行任务 12 f1("武松",1) 13 f1("武松",2) 14 p1 := f1("武松", 2) 15 f2("鲁智深",1) 16 f2("鲁智深",2) 17 p2 := f2("鲁智深", 2) 18 19 //查看各自的状态,各自的任务状态被保存在各自的闭包中。 20 fmt.Println("武松的进度是:",p1) 21 fmt.Println("鲁智深的进度是:",p2) 22 } 23 24 /* 25 闭包函数(返回函数的函数) 26 var progress int =0 如果不裹一层,那么他是全局变量。 27 裹一层后,他变成了局部变量。 28 */ 29 func GetTaskFunc() func(name string,hours int)(progress int){ 30 var progress int =0 31 32 //定义匿名函数,赋值给变量,f的类型是func(string,int) 33 f := func (name string,hours int) int{ 34 fmt.Printf("%s这个头领带队行军%d小时.\n",name,hours) 35 progress+=hours 36 return progress 37 } 38 return f 39 }