Через context.WithCancel: создаёшь ctx, cancel := context.WithCancel(parentCtx), передаёшь ctx всем горутинам. Вызываешь cancel() — все горутины получают сигнал через ctx.Done(). errgroup ещё удобнее: если одна горутина вернула ошибку, отменяются все остальные (errgroup.WithContext). Важно — горутины должны проверять ctx.Done() в своих циклах, иначе отмена не сработает. Паттерн: select { case <-ctx.Done(): return ctx.Err() }.
Как отменить группу горутин?
Middle
379 просмотровAFK Offer AI
Что такое write-through cache?