Как аварийно завершить несколько горутин

«Как аварийно завершить несколько горутин» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Используй context.Context для управления жизненным циклом горутин. Создай контекст с отменой (context.WithCancel) и передай его в горутины. При вызове cancel() все горутины, слушающие этот контекст, завершатся.

Пример:

ctx, cancel := context.WithCancel(context.Background())

go func() {
    select {
    case <-ctx.Done():
        return // завершение по отмене
    case <-time.After(5 * time.Second):
        fmt.Println("Work done")
    }
}()

// Аварийное завершение
cancel()

Для экстренных случаев можно использовать panic(), но это не рекомендуется — лучше управлять завершением через каналы или контекст.