Middle
Kas ir slēgums (closure) Go valodā un kā tas darbojas?
sobes.tech AI
Atbilde no AI
Aizvērums Go ir funkcija, kas "atceras" tās apkārtējās leksiskās vides mainīgo vērtības, pat ja šī vide vairs neeksistē.
Darbības princips ir šāds:
- Kad tiek izveidots aizvērums (piemēram, iekšā citas funkcijas), tas noķer atsauces uz mainīgajiem no tās vides, kurā tas tika deklarēts.
- Šie noķertie mainīgie paliek dzīvi tik ilgi, kamēr aizvērums pastāv, pat ja funkcija, kurā tie tika deklarēti, jau ir beigusies.
- Katru reizi, kad tiek izsaukts aizvērums, tas var piekļūt un mainīt šos noķertos mainīgos.
Piemērs:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Ārējās vides mainīgais
return func() int { // Tas ir aizvērums
count++ // Pieejas un izmaiņas `count`
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Izvadīs 1
fmt.Println(counter1()) // Izvadīs 2
counter2 := makeCounter() // Izveido jaunu aizvērumu ar savu `count`
fmt.Println(counter2()) // Izvadīs 1
}
Šajā piemērā funkcija makeCounter atgriež funkciju (aizvērumu). Šis aizvērums "noķer" mainīgo count. Katru reizi, kad izsauc atgriezto funkciju, count vērtība palielinās, piederot šai konkrētajai aizvēruma kopijai.