Middle
Was ist eine Closure in Go und wie funktioniert sie?
sobes.tech KI
Antwort von AI
Schließung in Go ist eine Funktion, die sich an den Wert der Variablen aus ihrer lexikalischen Umgebung "erinnert", auch nachdem diese Umgebung nicht mehr existiert.
Das Funktionsprinzip ist folgendes:
- Wenn eine Schließung erstellt wird (z.B. innerhalb einer anderen Funktion), erfasst sie Referenzen auf Variablen aus dem Gültigkeitsbereich, in dem sie deklariert wurde.
- Diese erfassten Variablen bleiben so lange lebendig, wie die Schließung existiert, auch wenn die Funktion, in der sie deklariert wurden, bereits beendet ist.
- Bei jedem Aufruf der Schließung kann sie auf diese erfassten Variablen zugreifen und sie ändern.
Beispiel:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Variable aus der äußeren Umgebung
return func() int { // Das ist eine Schließung
count++ // Es greift auf `count` zu und ändert es
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Gibt 1 aus
fmt.Println(counter1()) // Gibt 2 aus
counter2 := makeCounter() // Erzeugt eine neue Schließung mit eigenem `count`
fmt.Println(counter2()) // Gibt 1 aus
}
In diesem Beispiel gibt die Funktion makeCounter eine Funktion (Schließung) zurück. Diese Schließung "erfasst" die Variable count. Jeder Aufruf der zurückgegebenen Funktion erhöht den Wert von count, der zu dieser spezifischen Instanz der Schließung gehört.