> Как с помощью контекста завершить работу горутины в Go (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: VK
Стек: Go
> Пример ответа
Для завершения работы горутины через контекст используется пакет context. Основной механизм - передача контекста в горутину и проверка его состояния через ctx.Done(). Пример:
GOpackage mainimport ("context""fmt""time")func worker(ctx context.Context) {for {select {case <-ctx.Done():fmt.Println("Горутина завершена:", ctx.Err())returndefault:// Имитация работыfmt.Println("Работаю...")time.Sleep(500 * time.Millisecond)}}}func main() {ctx, cancel := context.WithCancel(context.Background())go worker(ctx)time.Sleep(2 * time.Second)cancel() // Отправляем сигнал завершенияtime.Sleep(1 * time.Second) // Даем время на завершение}
Ключевые моменты:
context.WithCancelсоздает контекст с функцией отмены.- В горутине
selectслушает каналctx.Done(), который закрывается при вызовеcancel(). - Альтернативы:
context.WithTimeout(авто-отмена по таймауту) илиcontext.WithDeadline(отмена в определенное время). - Всегда вызывайте
cancel(), чтобы избежать утечки ресурсов.
> Похожие задачи по Go
Что такое атомики и почему они быстрее мьютексов в Go
Какие инструменты используются для деплоя Go-приложения в продакшн
Как принимаются решения о внедрении изменений
Что лучше: выбрать из базы одним запросом тысячу id или сделать тысячу запросов по одному id
> Похожие задачи по backend
Что такое атомики и почему они быстрее мьютексов в Go
Какие инструменты используются для деплоя Go-приложения в продакшн
Как принимаются решения о внедрении изменений
Что лучше: выбрать из базы одним запросом тысячу id или сделать тысячу запросов по одному id
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью