Ir - cierre de función

El lenguaje de programación Go admite funciones anónimas que pueden actuar como cierres de funciones. Las funciones anónimas se utilizan cuando queremos definir una función en línea sin pasarle ningún nombre.

En nuestro ejemplo, creamos una función getSequence () que devuelve otra función. El propósito de esta función es cerrar sobre una variable i de función superior para formar un cierre. Por ejemplo

package main

import "fmt"

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
      return i  
   }
}

func main(){
   /* nextNumber is now a function with i as 0 */
   nextNumber := getSequence()  

   /* invoke nextNumber to increase i by 1 and return the same */
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   
   /* create a new sequence and see the result, i is 0 again*/
   nextNumber1 := getSequence()  
   fmt.Println(nextNumber1())
   fmt.Println(nextNumber1())
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

1
2
3
1
2