golang閉包
阿新 • • 發佈:2017-11-30
golang、閉包閉包:一個函數和與其相關的引用環境組合而成的實體
先看下面的這個例子:
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
個人理解:
其實理解閉包的最方便的方法就是將閉包函數看成一個類,一個閉包函數調用就是實例化一個類。
然後就可以根據類的角度看出哪些是“全局變量”,哪些是“局部變量”了。
比如上例中的adder函數返回func(int) int 的函數
pos和neg分別實例化了兩個“閉包類”,在這個“閉包類”中有個“閉包全局變量”sum。所以這樣就很好理解返回的結果了。
golang閉包