Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Как устроены контексты в 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

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

#context

#goroutines

#timeout

#cancelation

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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