Проверяет понимание особенностей работы defer с вызовом методов в Go, когда объект может быть nil.
В Go вызов метода через defer выполняется в момент выхода из функции, но если объект, на котором вызывается метод, равен nil, то при попытке вызова метода произойдет паника. Это связано с тем, что Go пытается разыменовать nil-указатель для вызова метода.
При выполнении 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-коде.