Ответ
Горутина в Go — это легковесный поток, управляемый рантаймом. Контекст горутины включает:
- Стек (обычно 2 КБ, динамически растёт)
- Состояние выполнения (running, blocked, dead)
- Связь с каналами, через которые она общается
- Привязка к потоку ОС, но не 1:1 (M:N модель)
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // завершение по контексту
default:
// работа
}
}
}
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// позже:
cancel() // сигнал завершения
Контекст помогает управлять жизненным циклом горутин, особенно для отмены операций и передачи значений (таймауты, deadline'ы).