Junior — Middle
Wat gebeurt er als je probeert gegevens uit een kanaal te lezen dat op dit moment geen elementen bevat?
sobes.tech AI
Antwoord van AI
In Go, als je probeert te lezen uit een kanaal dat op dat moment geen elementen bevat, hangt het gedrag af van het type kanaal:
- Gebufferde kanaal: als de buffer leeg is, wordt het lezen geblokkeerd totdat een element in het kanaal wordt geschreven.
- Ongebufferde kanaal: het lezen wordt geblokkeerd totdat een andere goroutine een waarde verzendt.
Dus, lezen uit een lege kanaal leidt tot het blokkeren van de huidige goroutine totdat er gegevens zijn of het kanaal wordt gesloten.
Voorbeeld:
ch := make(chan int)
// Lezen uit een lege kanaal blokkeert de uitvoering
val := <-ch // blokkeert totdat iemand een waarde verzendt
// Om blokkering te voorkomen, kan je select gebruiken met default
select {
case val := <-ch:
fmt.Println("Ontvangen", val)
default:
fmt.Println("Geen gegevens in het kanaal")
}