Middle+
В какъв ред операторът select чете от няколко канала?
sobes.tech AI
Отговор от AI
В Go операторът select избира случайно готов (ready) канал, ако има няколко. Ако нито един канал не е готов, select блокира (ако няма default).
Редът за четене от няколко канала не е фиксиран и не е гарантиран. Това е направено, за да се избегнат блокировки и да се осигури справедливо разпределение.
Пример:
select {
case msg1 := <-chan1:
fmt.Println("Получено от chan1:", msg1)
case msg2 := <-chan2:
fmt.Println("Получено от chan2:", msg2)
default:
fmt.Println("Няма готови канали")
}
Ако и двата, chan1 и chan2, са готови, Go ще избере произволно един от тях.