Golang: Closure

By Xah Lee. Date: . Last updated: .

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

  1. a function f defines a local variable x and a local function g
  2. g uses x
  3. f return g
  4. f is called, result assigned to h.
  5. 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



The Go Programming Language Specification - The Go Programming Language#Function_types