Что такое randomized select?

Middle+
444 просмотров
AFK Offer AI

Когда в select несколько case-ов готовы одновременно, Go выбирает один случайным образом. Это не баг, а фича — предотвращает starvation. Если бы выбирался всегда первый готовый case, остальные каналы могли бы вечно голодать. Рандомизация реализована внутри runtime.selectgo: массив case-ов перемешивается при каждом вызове select. Поэтому нельзя полагаться на порядок case-ов в select — Go намеренно не даёт приоритет. Если нужен приоритет, используй вложенные select или отдельные goroutine.

Следующий вопрос

Go — императивный или декларативный?