Sobes.tech
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 ще избере произволно един от тях.