匿名函数:
1 func(参数)(返回值){ 2 函数体 3 }//没有名字
执行:
1.赋给变量后执行

2.定义完后立即执行

闭包:函数+变量(嵌套该函数的外部,非全局)

常见形式:

例子:判断文件后缀


指南例子:
1 package main 2 3 4 import "fmt" 5 6 7 func adder() func(int) int { 8 sum := 0 9 return func(x int) int { 10 sum += x 11 return sum 12 } 13 } 14 15 16 func main() { 17 pos, neg := adder(), adder() 18 for i := 0; i < 10; i++ { 19 fmt.Println( 20 pos(i), 21 neg(-2*i), 22 ) 23 } 24 }

练习:斐波那契数列闭包( 这个数列从第3项开始,每一项都等于前两项之和)
1 package main 2 import ( 3 "fmt" 4 ) 5 // 返回一个“返回int的函数” 6 func fibonacci() func() int { 7 res1 := 0 8 res2 := 1 9 return func() int { 10 tmp := res1 11 res1,res2 =res2,(res1+res2)//变化两个变量的值,使得一直延续下去,满足序列“从第三个数开始,每一项等于前两项之和”的要求 12 return tmp//暂时地打印单个 13 } 14 } 15 func main() { 16 f := fibonacci() 17 for i := 0; i < 10; i++ {//打印10个 18 fmt.Println(f()) 19 } 20 }
浙公网安备 33010602011771号