Junior — Middle
Was passiert, wenn man versucht, Daten aus einem Kanal zu lesen, der momentan keine Elemente enthält?
sobes.tech KI
Antwort von AI
In Go, wenn du versuchst, aus einem Kanal zu lesen, der momentan keine Elemente enthält, hängt das Verhalten vom Kanaltyp ab:
- Pufferkanal: Wenn der Puffer leer ist, wird das Lesen blockiert, bis ein Element in den Kanal geschrieben wird.
- Unpufferter Kanal: Das Lesen wird blockiert, bis eine andere Goroutine einen Wert sendet.
Daher führt das Lesen aus einem leeren Kanal dazu, dass die aktuelle Goroutine blockiert, bis Daten vorhanden sind oder der Kanal geschlossen wird.
Beispiel:
ch := make(chan int)
// Lesen aus einem leeren Kanal blockiert die Ausführung
val := <-ch // blockiert, bis jemand einen Wert sendet
// Um die Blockierung zu vermeiden, kann man select mit default verwenden
select {
case val := <-ch:
fmt.Println("Empfangen", val)
default:
fmt.Println("Kein Daten im Kanal")
}