Sobes.tech
Junior — Middle

Wie oft muss man in Go einen Kanal schließen, um Fehler zu vermeiden?

sobes.tech KI

Antwort von AI

In Go muss ein Kanal genau einmal geschlossen werden, wenn keine Daten mehr gesendet werden sollen. Mehrfaches Schließen des Kanals führt zu einem Panic (runtime panic).

Wichtig:

  • Derjenige, der in den Kanal schreibt, soll ihn schließen, nicht der Leser.
  • Wenn der Kanal zum Austausch von Daten zwischen Goroutinen verwendet wird, signalisiert das Schließen, dass keine Daten mehr kommen.

Beispiel:

ch := make(chan int)
func() {
    defer close(ch) // schließt den Kanal einmal
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val)
}

In diesem Beispiel wird der Kanal nach dem Senden aller Werte einmal geschlossen.