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. Print String
  8. String Backslash Escape
  9. Rune
  10. Variable
  11. Zero Value
  12. Constant
  13. If Then Else
  14. Switch/Case
  15. Loop
  16. Basic Types
  17. Array
  18. Slice
  19. Map
  20. Struct
  21. Function
  22. Closure
  23. Pointer
  24. String, Byte Slice, Rune Slice
  25. regexp
  26. Read File
  27. Write to File
  28. Walk Dir
  29. Check File Exist
  30. System Call
  31. Get Script Path
  32. Defer
  33. Random Number


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


  1. Go Spec