Как прописать логику исполнения кода в Select

«Как прописать логику исполнения кода в Select» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go select позволяет ожидать нескольких операций с каналами. Он блокируется, пока один из его case не сможет выполниться, затем исполняет этот case. Если несколько case готовы, выбирается случайный.

Пример:

select {
case msg1 := <-ch1:
    fmt.Println("Received", msg1)
case msg2 := <-ch2:
    fmt.Println("Received", msg2)
case ch3 <- 42:
    fmt.Println("Sent 42 to ch3")
default:
    fmt.Println("No communication")
}

Особенности:

  • Если нет default, select блокируется до срабатывания любого case
  • default выполняется, если ни один канал не готов
  • Порядок case не влияет на приоритет
  • Можно использовать для неблокирующих операций с default