Go 指南学习笔记七

闭包

  • 函数也是一个值,也可以像其它值一样传递。函数值也可以作为参数或者返回值
  • 闭包是一个函数值,他引用了函数体之外的变量
  • 这个函数值可以对引用的变量进行修改或者赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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))
}
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Running] go run "/Users/badwolf/Documents/go/hello/tempCodeRunnerFile.go"
0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90
[Done] exited with code=0 in 0.605 seconds
如果您觉得对您有帮助,谢谢您的赞赏!