Sobes.tech
Back to questions
Junior — Middle
83

Как определяется порядок выполнения условий case в операторе select?

Answer from AI

sobes.tech AI

В операторе select в Go порядок проверки условий case не гарантируется и является случайным при наличии нескольких готовых каналов.

Это значит, что если несколько каналов готовы к операции (например, чтению или записи), то Go случайным образом выбирает один из них для выполнения, чтобы избежать приоритизации и блокировок.

Пример:

select {
case msg1 := <-chan1:
    fmt.Println("Received from chan1", msg1)
case msg2 := <-chan2:
    fmt.Println("Received from chan2", msg2)
default:
    fmt.Println("No channel ready")
}

Если оба канала chan1 и chan2 готовы, Go выберет случайный case.

Если ни один канал не готов и есть default, выполнится default.

Таким образом, порядок case в коде не влияет на выбор, что помогает избежать блокировок и обеспечивает справедливость при обработке нескольких каналов.