В какой момент произойдет блокировка канала с размерностью 100

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

Ответ

Канал с буфером (размерностью 100) блокируется в двух случаях:

  1. При отправке (оператор <-) – если буфер заполнен (уже 100 элементов).
  2. При чтении (оператор <-) – если буфер пуст.

Пример:

ch := make(chan int, 100) // буфер на 100 элементов

// Блокировка при отправке (когда буфер заполнен)
for i := 0; i < 101; i++ {
    ch <- i // 101-я отправка заблокируется
}

// Блокировка при чтении (когда буфер пуст)
for i := 0; i < 101; i++ {
    <-ch // 101-е чтение заблокируется
}