Sobes.tech
Middle

რა არის დახურვა (closure) in Go და როგორ მუშაობს?

sobes.tech AI

პასუხი AI-სგან

Go-ში დახურვა არის ფუნქცია, რომელიც "მახსოვს" მისი ლექსიკური გარემოს ცვლილებების მნიშვნელობას, მიუხედავად იმისა, რომ ეს გარემო აღარ არსებობს.

მუშაობის პრინციპი შემდეგია:

  1. როდესაც ქმნიან დახურვას (მაგალითად, სხვა ფუნქციის შიგნით), ის იჭერს მითითებებს იმ ცვლილებებზე, რომლებიც გამოაცხადეს იმ გარემოში.
  2. ეს იჭერილი ცვლილებები რჩება ცოცხალი მანამ, სანამ დახურვა არსებობს, მიუხედავად იმისა, რომ მათ გამოაცხადა ფუნქცია უკვე დასრულდა.
  3. ყოველი გამოძახებისას, დახურვა შეუძლია წვდომა და ცვლილება ამ იჭერილი ცვლილებების.

მაგალითი:

package main

import "fmt"

func makeCounter() func() int {
	count := 0 // გარე გარემოს ცვლილება
	return func() int { // ეს არის დახურვა
		count++ // ის წვდომა და ცვლილება `count`-ზე
		return count
	}
}

func main() {
	counter1 := makeCounter()
	fmt.Println(counter1()) // გამოიტანს 1
	fmt.Println(counter1()) // გამოიტანს 2

	counter2 := makeCounter() // ქმნის ახალი დახურვა თავისი `count`-ით
	fmt.Println(counter2()) // გამოიტანს 1
}

ამ მაგალითში, ფუნქცია makeCounter აბრუნებს ფუნქციას (დახურვას). ეს დახურვა "ჭერს" ცვლილებას count. ყოველი გამოძახებისას, დაბრუნებული ფუნქცია ზრდის count-ის მნიშვნელობას, რომელიც მიეკუთვნება ამ კონკრეტულ დახურვას.