函数也是值。
1 package main 2 3 import ( 4 "fmt" 5 "math" 6 ) 7 8 func main() { 9 hypot := func(x, y float64) float64 { 10 return math.Sqrt(x*x + y*y) 11 } 12 13 fmt.Println(hypot(3, 4)) 14 }
5
并且函数是全闭包。adder函数就是一个闭包,每一个闭包被限制使用它自己的SUM变量。
1 package main 2 3 import "fmt" 4 5 func adder() func(int) int { 6 sum := 0 7 return func(x int) int { 8 sum += x 9 return sum 10 } 11 } 12 13 func main() { 14 pos, neg := adder(), adder() 15 for i := 0; i < 10; i++ { 16 fmt.Println( 17 pos(i), 18 neg(-2*i), 19 ) 20 } 21 }
0 0 1 -2 3 -6 6 -12 10 -20 15 -30 21 -42 28 -56 36 -72 45 -90