Middle
Go-da bağlama (closure) nədir və necə işləyir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da bağlama, ətraf mühitdəki dəyişənlərin dəyərini "xatırlayan" funksiyadır, hətta bu mühit artıq mövcud olmasa belə.
İş prinsipi aşağıdakı kimidir:
- Bağlama yaradıldıqda (məsələn, başqa bir funksiyanın içində), o, elan olunduğu sahədən dəyişənlərə istinadları tutar.
- Bu tutulan dəyişənlər, bağlama mövcud olduğu müddətcə canlı qalır, hətta onları elan edən funksiya artıq bitmiş olsa belə.
- Hər çağırışda, bağlama bu tutulan dəyişənlərə müraciət edə və onları dəyişə bilər.
Nümunə:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Xarici mühitdə dəyişən
return func() int { // Bu, bağlamadır
count++ // `count`-a müraciət edir və onu dəyişir
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // 1 göstərəcək
fmt.Println(counter1()) // 2 göstərəcək
counter2 := makeCounter() // Öz `count`-u olan yeni bağlama yaradır
fmt.Println(counter2()) // 1 göstərəcək
}
Bu nümunədə, makeCounter funksiyası bir funksiya (bağlama) qaytarır. Bu bağlama count dəyişənini "tutaraq" saxlayır. Geri çağırılan funksiya hər çağırıldıqda, count-un dəyəri artırılır və bu, həmin bağlamanın konkret nüsxəsinə aiddir.