Sobes.tech
Junior — Middle

Wie verhält sich das Programm beim Verwenden von range zum Lesen aus einem geschlossenen, unpufferierten Kanal?

sobes.tech KI

Antwort von AI

Beim Verwenden von range, um aus einem Kanal in Go zu lesen, erhält die Schleife Werte aus dem Kanal, bis dieser geschlossen wird. Wenn der Kanal geschlossen ist und alle Werte gelesen wurden, beendet range die Schleife.

Für einen unpufferierten Kanal funktioniert es genauso wie für einen gepufferten: Wenn der Kanal geschlossen ist, blockiert range nicht und verlässt die Schleife.

Beispiel:

ch := make(chan int)
func() {
    ch <- 1
    ch <- 2
    close(ch)
}()

for v := range ch {
    fmt.Println(v) // Gibt 1 und 2 aus, dann endet die Schleife
}

Wenn der Kanal geschlossen ist, aber keine Daten enthält, endet range sofort. Wenn der Kanal nicht geschlossen ist, aber keine Daten hat, wartet range (blockiert), bis Daten eintreffen oder der Kanal geschlossen wird.