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

  1. 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.
  2. Diese erfassten Variablen bleiben so lange lebendig, wie die Schließung existiert, auch wenn die Funktion, in der sie deklariert wurden, bereits beendet ist.
  3. 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.