Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: Go, defer, nil pointer, panic, resp.Body.Close

При каком условии вызов resp.Body.Close() через defer может привести к панике?

Проверяет понимание особенностей работы defer с вызовом методов в Go, когда объект может быть nil.

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

Вызов resp.Body.Close() через defer может привести к панике, если resp.Body равен nil. Это происходит, когда в ответе на HTTP-запрос тело ответа отсутствует или произошла ошибка, и объект resp не был корректно инициализирован. Чтобы избежать паники, нужно проверять resp.Body на nil перед вызовом Close().

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

Проблема с defer и nil указателем

В Go вызов метода через defer выполняется в момент выхода из функции, но если объект, на котором вызывается метод, равен nil, то при попытке вызова метода произойдет паника. Это связано с тем, что Go пытается разыменовать nil-указатель для вызова метода.

Пример с HTTP-запросом

При выполнении HTTP-запроса с помощью http.Get или http.Post, если возникает ошибка, объект resp может быть nil. В таком случае вызов resp.Body.Close() через defer приведет к панике.

resp, err := http.Get("https://example.com")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close() // паника, если resp == nil

Как избежать паники

Необходимо проверять, что resp не равен nil, прежде чем вызывать defer. Обычно это делается после обработки ошибки:

resp, err := http.Get("https://example.com")
if err != nil {
    log.Fatal(err)
}
if resp != nil {
    defer resp.Body.Close()
}

Вывод

Всегда проверяйте, что объект не nil, перед использованием defer с вызовом его методов, особенно при работе с HTTP-ответами, чтобы избежать неожиданных паник в production-коде.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Golang

    Golang

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

#Go

#defer

#nil pointer

#panic

#resp.Body.Close

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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