(Go Lang) Closures (GBEN)

Go by Example

Example

  • Like in Lisp
  • Don’t allow recursion against themselves

// Go supports anonymous functions, which can form closures. Anonymous
// functions are useful when you want to define a function inline without
// having to name it.

// This function intSeq returns another function, which we define anonymously
// in the body of intSeq. The returned function closes over the variable i to
// form a closure.
intSeq := func() func() int {
  i := 0
  return func() int {
    i += 1
    return i
  }
}

// We call intSeq, assigning the result (a function) to nextInt. This
// function value captures its own i value, which will be updated each time
// we call nextInt.
nextInt := intSeq()
// See the effect of the closure by calling nextInt a few times.
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
// To confirm that the state is unique to that particular function, create and test a new one.
newInts := intSeq()
fmt.Println(newInts())
1
2
3
1

Attribution

Leave a Reply

Your email address will not be published. Required fields are marked *