Middle
რა არის დახურვა (closure) in Go და როგორ მუშაობს?
sobes.tech AI
პასუხი AI-სგან
Go-ში დახურვა არის ფუნქცია, რომელიც "მახსოვს" მისი ლექსიკური გარემოს ცვლილებების მნიშვნელობას, მიუხედავად იმისა, რომ ეს გარემო აღარ არსებობს.
მუშაობის პრინციპი შემდეგია:
- როდესაც ქმნიან დახურვას (მაგალითად, სხვა ფუნქციის შიგნით), ის იჭერს მითითებებს იმ ცვლილებებზე, რომლებიც გამოაცხადეს იმ გარემოში.
- ეს იჭერილი ცვლილებები რჩება ცოცხალი მანამ, სანამ დახურვა არსებობს, მიუხედავად იმისა, რომ მათ გამოაცხადა ფუნქცია უკვე დასრულდა.
- ყოველი გამოძახებისას, დახურვა შეუძლია წვდომა და ცვლილება ამ იჭერილი ცვლილებების.
მაგალითი:
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-ის მნიშვნელობას, რომელიც მიეკუთვნება ამ კონკრეტულ დახურვას.