출처: http://tour.golang.org/#37
모든 함수는 closure 이다.
C++ 문법에 closure 는 없었다.
closure 가 무엇인가.
코드실행결과를 보면, 함수내부의 변수값을 기억한다.
C++ 의 static 변수와 그 기능이 같다.
함수내부변수를 기억하는기능을 가진 함수. 그것이 closure 인가.
package main
import (
"fmt"
)
func main() {
fmt.Println("---------------------")
pos, neg := adder(), adder()
fmt.Printf( "%T\n", pos)
fmt.Println( pos(1))
fmt.Println( pos(1))
fmt.Println( pos(1))
fmt.Println( pos(1))
fmt.Println("---------------------")
fmt.Println( neg(-1))
fmt.Println( neg(-1))
fmt.Println( neg(-1))
fmt.Println( neg(-1))
fmt.Println("---------------------")
}
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
D:\DEV\PP\work_4\src>go run hello66.go
---------------------
func(int) int
1
2
3
4
---------------------
-1
-2
-3
-4
---------------------