Ответ
Для синхронизации через буферизированный канал обычно используют chan struct{} — пустую структуру. Это оптимально, так как struct{} занимает 0 байт в памяти.
Пример:
done := make(chan struct{}, 1)
// Горутина сигнализирует о завершении
go func() {
// ... работа ...
done <- struct{}{}
}()
// Ожидание сигнала
<-done
Альтернативы:
chan bool(занимает 1 байт, менее эффективен)chan int(избыточен для синхронизации)
Использование struct{} — идиоматичный подход в Go для сигналов без передачи данных.