Golang: Closure
Golang's function is a closure.
Closure is a programing language feature. It means, a function such that all variables it uses will still work in abnormal situations when function returns a function and the inner function uses outer function's variable but the inner function is no longer in the context of outer function. (In other words, all golang function carries a environment for all the variables it uses.)
For example
- a function f defines a local variable x and a local function g
- g uses x
- f return g
- f is called, result assigned to h.
- h is now a function that is g. all variables used by h, still works (even though they were local variables of f)
In practice, closure means you can create a function that maintains a state, without using global variable.
You create a closure by defining a function that return a function. Then call the function and assign result to a variable, the variable is a new function, a clojure.
Closure is basically the core concept of “class and object” in Java, Python, etc.
package main import "fmt" // return a closure func make_add_1() func(int) int { var i = 0 var gg = func(x int) int { i += x return i } // the returned function gg, is called a “closure” return gg } func main() { var f = make_add_1() fmt.Println(f(1)) // 1 fmt.Println(f(1)) // 2 fmt.Println(f(1)) // 3 }
Reference
The Go Programming Language Specification - The Go Programming Language#Function_types
If you have a question, put $5 at patreon and message me.