Sobes.tech
Middle

Ce este o închidere (closure) în Go și cum funcționează?

sobes.tech AI

Răspuns de la AI

Închiderile în Go sunt funcții care "își amintesc" valoarea variabilelor din mediul lor lexical, chiar și după ce acest mediu nu mai există.

Principiul de funcționare este următorul:

  1. Când se creează o închidere (de exemplu, în interiorul unei alte funcții), aceasta capturează referințe la variabilele din domeniul în care a fost declarată.
  2. Aceste variabile capturate rămân vii atât timp cât închiderea există, chiar dacă funcția în care au fost declarate s-a încheiat deja.
  3. La fiecare apel al închiderii, aceasta poate accesa și modifica aceste variabile capturate.

Exemplu:

package main

import "fmt"

func makeCounter() func() int {
	count := 0 // Variabilă din mediul extern
	return func() int { // Aceasta este o închidere
		count++ // Accesează și modifică `count`
		return count
	}
}

func main() {
	counter1 := makeCounter()
	fmt.Println(counter1()) // Va afișa 1
	fmt.Println(counter1()) // Va afișa 2

	counter2 := makeCounter() // Creează o nouă închidere cu propriul `count`
	fmt.Println(counter2()) // Va afișa 1
}

În acest exemplu, funcția makeCounter returnează o funcție (închidere). Această închidere "capturează" variabila count. Fiecare apel al funcției returnate crește valoarea lui count, care aparține acestei instanțe specifice de închidere.