chan struct{}chan struct{} — это канал, по которому передаётся не данные, а сам факт сигнала. Пустая структура struct{} не занимает памяти (0 байт), поэтому такой канал явно говорит читателю кода: «здесь важно только событие, а не его содержимое».Типичные сценарии:
• Сигнал завершения / отмены. Закрытие канала (
close(done)) разом оповещает всех, кто его слушает.• Синхронизация горутин. Одна горутина ждёт, пока другая пошлёт сигнал
ch <- struct{}{}.• Семафоры и ограничение параллелизма, где важен сам факт занятости слота, а не передаваемое значение.
done := make(chan struct{})
go func() {
// ... работа ...
close(done) // сигнализируем о завершении
}()
<-done // ждём сигналПочему именно
struct{}, а не, например, chan bool: булев канал намекает, что значение (true/false) несёт смысл, хотя на деле его игнорируют. chan struct{} выражает намерение точнее — «данных нет, есть только событие» — и не тратит память на само значение.🐸 Библиотека Go для собеса