> Как с помощью контекста завершить работу горутины в Go (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: VK

Стек: Go

> Пример ответа

Для завершения работы горутины через контекст используется пакет context. Основной механизм - передача контекста в горутину и проверка его состояния через ctx.Done(). Пример:

GO
package main
import (
"context"
"fmt"
"time"
)
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Горутина завершена:", ctx.Err())
return
default:
// Имитация работы
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(), чтобы избежать утечки ресурсов.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью