Junior — Middle
Is het gedrag van de select-functie in Go voorspelbaar of willekeurig?
sobes.tech AI
Antwoord van AI
Het gedrag van de functie select in Go is gedeeltelijk voorspelbaar, maar in het geval dat meerdere kanalen gelijktijdig klaar zijn, wordt de kanaalselectie willekeurig (toevallig) gedaan. Dit is gedaan om blokkades te voorkomen en een eerlijke verdeling te garanderen.
Als slechts één kanaal klaar is, kiest select dat kanaal. Als geen enkel kanaal klaar is en er geen default is, wordt select geblokkeerd.
Voorbeeld:
select {
case msg1 := <-chan1:
fmt.Println("Ontvangen van chan1", msg1)
case msg2 := <-chan2:
fmt.Println("Ontvangen van chan2", msg2)
default:
fmt.Println("Geen kanalen klaar")
}
Als beide kanalen klaar zijn, wordt de keuze tussen hen willekeurig gemaakt.