2011-08-15

Go has closures


Function literals are indeed closures.
func adder() (func(int) int) {
    var x int
    return func(delta int) int {
        x += delta
        return x
    }
f := adder()
fmt.Print(f(1))
fmt.Print(f(20))
fmt.Print(f(300))
Prints 1 21 321 - accumulating in f's x.