Вопросы с собеседований по Go и ответы на них.
Учиться у нас: clc.to/iEeaZw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
Наши каналы: https://t.me/proglibrary/9197
Post #1385
1.57K
❓ Чем
На практике это важно, потому что большинство современных Go-библиотек принимают контекст:
🐸 Библиотека Go для собеса
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 для собеса
- 👍 4
