1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | package main import ( "fmt" "math" ) //匿名函数 func main(){ //无参匿名函数 func(){ fmt.Println("jonson") }() //有参匿名函数 func(data int){ fmt.Println("data:",data) }(5) //有返回值的匿名函数 result:=func(data float64) float64{ return math.Sqrt(data) }(9) fmt.Println("result:",result) greet:=func(){ fmt.Println("greet jonson") } greet() fmt.Printf("greet的类型是%T\n",greet) //闭包 greetjonson() //函数作为返回值 makejonson := makeGreeter() fmt.Printf("类型:%T,返回值:%v\n",makejonson,makejonson()) //闭包做为返回值 makeeven := makeEvenGenerator() fmt.Println("makeeven i = ",makeeven()) fmt.Println("makeeven i = ",makeeven()) fmt.Println("makeeven i = ",makeeven()) //callback函数作为参数 visit([]int{ 1,2,3,4},func(n int){ fmt.Println(n+1) }) //死循环 fmt.Println(factorial(5)) var i uint = 0 for ;i<20;i++{ fmt.Println(fabicc(i)) } } //闭包 func greetjonson(){ x:=0 increment:= func() int{ x++ return x } fmt.Println(increment()) fmt.Println(increment()) } //函数作为返回值 func makeGreeter() func() string{ return func() string { return "hello jonson" } } //闭包与函数返回值 func makeEvenGenerator() func() int{ i:=0 return func() int{ i+=2 return i } } //callback函数作为参数 func visit(numbers []int,callback func(int)){ for _,n :=range numbers{ callback(n) } } //递归 // 计算阶乘 5 5*4*3*2*1 func factorial(x uint) uint{ if x==0{ return 1 } return x * factorial(x-1) } //fabicc func fabicc(x uint) uint{ if(x==0){ return 0 } if(x==1){ return 1 } return fabicc(x-2) + fabicc(x-1) } |