関数クロージャ
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),
)
}
}