Golang: Closure

By Xah Lee. Date: .

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. (a function that 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

If you have a question, put $5 at patreon and message me.


  1. Compile, Run
  2. Source Encoding
  3. Package, Import
  4. Comment
  5. Print
  6. String
  7. String Functions
  8. Print String
  9. String Backslash
  10. Rune
  11. Variable
  12. Zero Value
  13. Constant
  14. If Then Else
  15. Switch/Case
  16. Loop
  17. Basic Types
  18. Array
  19. Slice
  20. Map
  21. Struct
  22. Function
  23. Closure
  24. Pointer
  25. String, Byte Slice, Rune Slice
  26. regexp
  27. Read File
  28. Write to File
  29. Walk Dir
  30. Check File Exist
  31. System Call
  32. Get Script Path
  33. Defer
  34. Random Number


  1. Match Any Regexp
  2. Find String
  3. Find Replace
  4. Validate Links
  5. Generate Sitemap


  1. Go Spec