Какой тип данных следует использовать при использовании буферизированного канала как средства синхнонизации

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

Ответ

Для синхронизации через буферизированный канал обычно используют chan struct{} — пустую структуру. Это оптимально, так как struct{} занимает 0 байт в памяти.

Пример:

done := make(chan struct{}, 1)

// Горутина сигнализирует о завершении
go func() {
    // ... работа ...
    done <- struct{}{}
}()

// Ожидание сигнала
<-done

Альтернативы:

  • chan bool (занимает 1 байт, менее эффективен)
  • chan int (избыточен для синхронизации)

Использование struct{} — идиоматичный подход в Go для сигналов без передачи данных.