> Что происходит с паниками в Go? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go
> Пример ответа
В Go паника (panic) - это механизм аварийного завершения программы при возникновении невосстановимой ошибки, например, разыменования nil-указателя, выхода за границы слайса или явного вызова panic(). При панике нормальное выполнение функции немедленно прекращается, и начинается раскрутка стека (stack unwinding): последовательно вызываются все отложенные функции (defer) в каждой функции текущей горутины. Если ни один из defer не вызывает recover(), программа завершается с выводом сообщения об ошибке и стектрейса.
Ключевой момент: панику можно перехватить с помощью recover() внутри отложенной функции. Если recover() вызван в defer, он останавливает раскрутку стека и возвращает значение, переданное в panic(). После этого выполнение продолжается с точки, следующей за вызовом defer. Однако recover() работает только в той же горутине, где произошла паника, и только внутри defer. Пример:
GOfunc safeCall() {defer func() {if r := recover(); r != nil {fmt.Println("Recovered from panic:", r)}}()panic("something went wrong")}
Важно: паники не должны использоваться для обработки обычных ошибок - для этого есть возврат ошибок (error). Паника - это крайняя мера для truly exceptional ситуаций, например, ошибок инициализации или багов. В production-коде рекомендуется перехватывать паники на верхнем уровне (например, в HTTP-обработчике или воркере), чтобы не уронить весь сервис.
> Похожие задачи по Go
Можно ли сделать длину канала для задач равной 10?
Куда попадает функция при вызове go в Go? В какую очередь?
Как происходит эвакуация элементов в хэш-таблице?
Какой тип ID является последовательным?
> Похожие задачи по backend
Можно ли сделать длину канала для задач равной 10?
Куда попадает функция при вызове go в Go? В какую очередь?
Как происходит эвакуация элементов в хэш-таблице?
Какой тип ID является последовательным?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью