instruction: Explain go by example: closures
output: Go by Example
  : Closures
  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.
  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
  ++
  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
  ())
  }
  $
  go run closures.go
  1
  2
  3
  1
  The last feature of functions we’ll look at for now is
  recursion.
  Next example:
  Recursion
  .
  by
  Mark McGranaghan
  and
  Eli Bendersky
  |
  source
  |
  license