Middle
Go'da kapanış (closure) nedir ve nasıl çalışır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da kapanış, çevresel bağlamındaki değişkenlerin değerlerini "hatırlayan" bir fonksiyondur, hatta bu çevre artık var olmasa bile.
Çalışma prensibi şu şekildedir:
- Bir kapanış oluşturulduğunda (örneğin, başka bir fonksiyon içinde), tanımlandığı kapsamdan referanslar yakalar.
- Bu yakalanan değişkenler, kapanış var olduğu sürece canlı kalır, hatta onları tanımlayan fonksiyon zaten sona ermiş olsa bile.
- Her kapanış çağrısında, bu yakalanan değişkenlere erişebilir ve onları değiştirebilir.
Örnek:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Dış çevreden değişken
return func() int { // Bu bir kapanıştır
count++ // `count`'a erişir ve onu değiştirir
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // 1 yazdırır
fmt.Println(counter1()) // 2 yazdırır
counter2 := makeCounter() // Kendi `count`'u olan yeni bir kapanış oluşturur
fmt.Println(counter2()) // 1 yazdırır
}
Bu örnekte, makeCounter fonksiyonu bir fonksiyon (kapanış) döndürür. Bu kapanış, count değişkenini "yakalar". Döndürülen fonksiyon her çağrıldığında, bu kapanışın ait olduğu count değeri artırılır.