Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: defer, golang, recover

Объясни разницу между defer, panic и recover в Go

Вопрос проверяет знание механизма обработки ошибок и аварийных ситуаций в Go.

Короткий ответ

defer откладывает выполнение функции до выхода из текущей. panic прерывает обычное выполнение и начинает раскрутку стека. recover позволяет поймать panic внутри defer и продолжить выполнение программы.

Длинный ответ

Go не имеет исключений как в Java, но предоставляет комбинацию panic/recover и отложенные вызовы defer.

  • defer — гарантирует вызов функции перед выходом из текущей, часто используется для Close() ресурсов.

  • panic — сигнализирует об аварийной ситуации, выполнение текущей горутины прерывается, начинается раскрутка стека и вызовы defer.

  • recover — может быть вызван внутри отложенной функции, чтобы остановить panic и вернуть контроль.

Пример:

func safeDivide(a, b int) {
		defer func() {
				if r := recover(); r != nil {
						fmt.Println("Recovered:", r)
				}
		}()
		if b == 0 {
				panic("division by zero")
		}
		fmt.Println(a / b)
}

Вывод:

  • defer — всегда освобождай ресурсы.

  • panic — используй только для truly exceptional situations.

  • recover — изолируй панику, чтобы сервис не падал целиком.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Golang

    Golang

Ключевые слова

#defer

#golang

#recover

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.