Go lang 学习,函数闭包
2017-12-22 本文已影响14人
SHAN某人
Go 函数可以是闭包的。闭包是一个函数值,它来自函数体的外部的变量引用。 函数可以对这个引用值进行访问和赋值;换句话说这个函数被“绑定”在这个变量上。
例如,函数 adder 返回一个闭包。每个闭包都被绑定到其各自的 sum 变量上。
package main
import "fmt"
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(
pos(i),
neg(-2*i),
)
}
}
运行结果
0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90
利用函数闭包实现求斐波那契数列第n项值
package main
import "fmt"
func febonaci() func(int) int {
x1 :=0 // febonaci(x-1)
x2 :=1 // febonaci(x-2)
sum := 0
return func(x int) int {
sum = x1 + x2
x1 = x2
x2 =sum
return sum
}
}
func main() {
fnum := febonaci()
for i := 0; i < 10; i++ {
fmt.Println(fnum(i))
}
}
运行结果
1
2
3
5
8
13
21
34
55
89