閉包demo
package main
import "fmt"
func AddOne() func (int) int {
var n int = 10
return func (x int) int {
n = n + x
return n
}
}
func main() {
f := AddOne()
fmt.Println(f(1))
fmt.Println(f(2))
fmt.Println(f(3))
}
輸出:
$ go run main.go
11
13
16
基本理解
閉包部分爲
var n int = 10
return func (x int) int {
n = n + x
return n
}
返回的函數和變量n構成了閉包。
由於返回的函數依賴變量n,因此形成了一個整體。此外,該返回的函數被變量f引用了,一直沒被釋放,因此n也一直存在。
換一種思路理解
閉包就相當於用函數式編程實現面向對象編程中的類。
簡單來說,可以將閉包理解成一個類