stop() после signal.NotifyContextВнутри пакета
signal ведётся реестр каналов, которым нужно доставлять сигналы. Пока stop не вызван, канал остаётся в этом реестре. Это означает две проблемы.Первая — утечка ресурсов: внутренний канал не будет собран GC, даже если контекст уже отменён и никто его не использует.
Вторая — поведенческая: если программа перехватывает тот же сигнал в нескольких местах, лишние подписчики продолжат получать события, что может приводить к неожиданному поведению.
Правило простое:
stop вызывается через defer сразу после создания контекста, независимо от того, был ли сигнал получен.ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT)
defer stop() // освобождает ресурсы в любом случае
🐸 Библиотека Go для собеса