Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: context, goroutines, timeout, cancelation

Как устроены контексты в Go?

Этот вопрос проверяет понимание концепции контекстов в Go, которые используются для управления временем выполнения, отмены и передачи данных между горутинами.

Короткий ответ

Контексты в Go — это механизм для управления жизненным циклом горутин. Они позволяют устанавливать дедлайны, отменять задачи и передавать данные между горутинами. Контексты создаются через функции пакета context и часто используются в сетевых запросах или долгоживущих процессах.

Длинный ответ

Контексты в Go реализуются с помощью пакета context. Главный интерфейс Context предоставляет четыре ключевых метода:

  • Deadline — возвращает дедлайн выполнения задачи, если он установлен.

  • Done — возвращает канал, который закрывается при отмене контекста.

  • Err — возвращает ошибку, если контекст завершён или отменён.

  • Value — позволяет хранить и извлекать данные, связанные с контекстом.

Создание контекста:

  • Базовый контекст: используется как отправная точка.

    ctx := context.Background() // Контекст без данных и времени выполнения
  • С отменой:

    ctx, cancel := context.WithCancel(context.Background())
    go func() {
        time.Sleep(2 * time.Second)
        cancel() // Отменяет контекст
    }()
    <-ctx.Done() // Ожидание завершения
    fmt.Println("Контекст завершён:", ctx.Err())
  • С дедлайном:

    ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(1*time.Second))
    defer cancel()
    <-ctx.Done()
    fmt.Println("Сработал дедлайн:", ctx.Err())

В каких случаях использовать

  • Для управления временем выполнения HTTP-запросов.

  • В ситуациях, когда необходимо синхронно завершить связанные горутины.

  • Для передачи настроек или метаданных (например, идентификаторов запросов).

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#context

#goroutines

#timeout

#cancelation

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.