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

  1. 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.
  2. 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ə.
  3. 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.