signal.NotifyContext отличается от signal.Notifysignal.Notify — низкоуровневый примитив. Он перенаправляет сигналы в предоставленный канал, и приложение само обязано читать из него в горутине, обрабатывать значения и принимать решения.signal.NotifyContext — обёртка поверх того же механизма, но интегрированная с context.Context. Получение сигнала автоматически отменяет контекст, и приложение работает через стандартный ctx.Done() — без ручного управления каналом.На практике это важно, потому что большинство современных Go-библиотек принимают контекст:
http.Server.Shutdown(ctx), sql.DB, gRPC-клиенты и т.д. signal.NotifyContext позволяет напрямую связать сигнал ОС с этими вызовами без дополнительного кода.// signal.Notify — ручное управление
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGINT)
go func() {
<-ch
// вручную инициировать завершение
}()
// signal.NotifyContext — контекст сам распространяет отмену
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT)
defer stop()
server.Shutdown(ctx) // контекст отменится при SIGINT
🐸 Библиотека Go для собеса