Sobes.tech
Назад к вопросам
Middle+
7

В каком порядке оператор select читает из нескольких каналов?

Компании, где спрашивали
ТБанк

Ответ от нейросети

sobes.tech 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 случайно выберет один из них.