Middle
Čo je uzáver (closure) v Go a ako funguje?
sobes.tech AI
Odpoveď od AI
Zatvorenie v Go je funkcia, ktorá "pamätá" hodnotu premenných z jej lexikálneho prostredia, aj po tom, čo toto prostredie prestane existovať.
Princíp fungovania je nasledovný:
- Keď je vytvorené zatvorenie (napríklad vo vnútri inej funkcie), zachytáva odkazy na premenné z oblasti, v ktorej bolo deklarované.
- Tieto zachytené premenné zostávajú živé, kým zatvorenie existuje, aj keď funkcia, v ktorej boli deklarované, už skončila.
- Pri každom volaní zatvorenia, môže pristupovať k týmto zachyteným premenným a meniť ich.
Príklad:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Vonkajšia premenná
return func() int { // Toto je zatvorenie
count++ // Pristupuje k `count` a mení ho
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Vypíše 1
fmt.Println(counter1()) // Vypíše 2
counter2 := makeCounter() // Vytvorí nové zatvorenie s vlastným `count`
fmt.Println(counter2()) // Vypíše 1
}
V tomto príklade funkcia makeCounter vracia funkciu (zatvorenie). Toto zatvorenie "zachytáva" premennú count. Každé volanie vrátenej funkcie zvyšuje hodnotu count, ktorá patrí tejto konkrétnej inštancii zatvorenia.