Skip to content

Instantly share code, notes, and snippets.

@makeittotop
Created March 23, 2015 14:56
Show Gist options
  • Select an option

  • Save makeittotop/cb9f07d69f70f0d9a133 to your computer and use it in GitHub Desktop.

Select an option

Save makeittotop/cb9f07d69f70f0d9a133 to your computer and use it in GitHub Desktop.
go closure example
// from gobyexample.com
package main
import "fmt"
// 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.
func intSeq() func() int {
i := 0
return func() int {
i += 1
return i
}
}
func main() {
// 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())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment