Встречается на 29% собеседований по Go

В чем разница между буферизованным и небуферизованным каналом

Буферизованные и небуферизованные каналы в Go различаются поведением при отправке и получении данных:

Небуферизованный канал (make(chan T)):

  • Отправка блокируется, пока данные не будут получены
  • Получение блокируется, пока не поступят данные
  • Обеспечивает синхронизацию горутин
go
ch := make(chan int) // небуферизованный
go func() { ch <- 1 }()
fmt.Println(<-ch) // 1

Буферизованный канал (make(chan T, N)):

  • Отправка блокируется только при заполнении буфера
  • Получение блокируется только при пустом буфере
  • Позволяет асинхронную работу
go
ch := make(chan int, 2) // буферизованный (емкость 2)
ch <- 1
ch <- 2
fmt.Println(<-ch, <-ch) // 1 2

Выбор зависит от требований к синхронизации и производительности.

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы