Context

8 вопросов

context.Context - механизм для передачи дедлайнов, сигналов отмены и request-scoped данных. Всегда передаётся первым аргументом функции по конвенции Go.

1 Где обычно передаётся context в функции? 🟢 Лёгкий
Ответ: B) Первым аргументом

Конвенция Go: ctx context.Context - всегда первый аргумент функции. Не храните context в структурах. Создавайте для каждого запроса/операции.

Подробнее →
2 Что произойдёт с дочерними контекстами при отмене родительского? 🟢 Лёгкий
Ответ: B) Все дочерние тоже отменятся

Контексты образуют дерево. Отмена родительского контекста каскадно отменяет все дочерние - прямые и вложенные. Обратное неверно: отмена дочернего контекста не влияет на родительский. Это позволяет отменять целые поддеревья запросов.

Подробнее →
3 Что происходит при отмене родительского context? 🟢 Лёгкий
Ответ: B) Все дочерние тоже отменяются каскадно

Отмена context каскадно отменяет все дочерние context'ы через ctx.Done(). Это ключевой механизм graceful shutdown: отменили корневой - все горутины получают сигнал. Дочерний может быть отменён раньше родительского (WithTimeout).

Подробнее →
4 Для чего нужен context.Context? 🟡 Средний
Ответ: B) Передачи дедлайнов, отмены и значений между горутинами

context.Context - механизм для передачи сигналов отмены, дедлайнов и request-scoped данных через цепочку вызовов. Позволяет корректно завершать работу при отмене.

Подробнее →
5 Что делает context.WithCancel(parent)? 🟡 Средний
Ответ: B) Создаёт дочерний контекст с функцией отмены

Возвращает (ctx, cancel). Вызов cancel() отменяет ctx и всех его потомков. Родительский parent не затрагивается. Всегда вызывайте cancel() через defer для освобождения ресурсов.

Подробнее →
6 Что делает context.WithTimeout(ctx, 5*time.Second)? 🟡 Средний
Ответ: B) Создаёт контекст, который отменится через 5 секунд

WithTimeout - обёртка над WithDeadline. Контекст автоматически отменяется по истечении таймаута ИЛИ при вызове cancel(). Канал ctx.Done() закрывается при отмене.

Подробнее →
7 Какой тип рекомендуется для ключа в context.WithValue? 🔴 Сложный
Ответ: C) Неэкспортируемый тип (type ctxKey struct{})

Неэкспортируемый тип (type ctxKey struct{}) предотвращает коллизии ключей между пакетами. Строковые ключи могут совпасть случайно. Каждый пакет определяет свой приватный тип ключа для изоляции значений в контексте.

Подробнее →
8 Что делает context.AfterFunc(ctx, f) (Go 1.21+)? 🔴 Сложный
Ответ: B) Вызывает f в отдельной горутине после отмены ctx

context.AfterFunc регистрирует функцию f, которая будет вызвана в отдельной горутине после отмены контекста ctx. Возвращает функцию stop для отмены регистрации. Полезно для cleanup-логики, привязанной к жизненному циклу контекста.

Подробнее →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.