Sobes.tech
Назад к вопросам
Middle
2

Что произойдёт, если паника возникнет в горутине без defer-recover?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Если в горутине возникает паника (panic), и в этой же горутине нет отложенной функции с recover, то паника распространяется вверх по стэку вызовов этой горутины и приводит к завершению именно этой горутины. При этом остальные горутины продолжают работать.

Однако, если паника не будет обработана в главной горутине (main goroutine), то это приведёт к завершению всей программы с выводом стека вызовов.

Пример:

func main() {
    go func() {
        panic("ошибка в горутине")
    }()
    time.Sleep(time.Second) // чтобы горутина успела сработать
    fmt.Println("программа продолжает работу")
}

В этом примере паника в горутине не остановит программу, так как она не в главной горутине и не обработана. Если же паника возникнет в главной горутине без recover, программа завершится с ошибкой.