Middle
¿Qué es un cierre (closure) en Go y cómo funciona?
sobes.tech AI
Respuesta de la IA
El cierre en Go es una función que "recuerda" el valor de las variables del entorno léxico que la rodea, incluso después de que ese entorno ha dejado de existir.
El principio de funcionamiento es el siguiente:
- Cuando se crea un cierre (por ejemplo, dentro de otra función), captura referencias a las variables del ámbito donde fue declarado.
- Estas variables capturadas permanecen vivas mientras el cierre exista, incluso si la función en la que fueron declaradas ya ha terminado.
- Cada vez que se llama al cierre, puede acceder y modificar estas variables capturadas.
Ejemplo:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Variable del entorno externo
return func() int { // Este es un cierre
count++ // Accede y modifica `count`
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Imprime 1
fmt.Println(counter1()) // Imprime 2
counter2 := makeCounter() // Crea un nuevo cierre con su propio `count`
fmt.Println(counter2()) // Imprime 1
}
En este ejemplo, la función makeCounter devuelve una función (cierre). Este cierre "captura" la variable count. Cada llamada a la función devuelta incrementa el valor de count, que pertenece a esa instancia específica del cierre.