Sobes.tech
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:

  1. Cuando se crea un cierre (por ejemplo, dentro de otra función), captura referencias a las variables del ámbito donde fue declarado.
  2. Estas variables capturadas permanecen vivas mientras el cierre exista, incluso si la función en la que fueron declaradas ya ha terminado.
  3. 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.