Вы не можете сделать это заявление err: = defer res.Body.Close ()
Вот так. Поэтому это утверждение неверно. Следующее является допустимым.
defer func(){
if err := res.Body.Close(); err !=nil {
log.Error(err);
}
}()
Кроме того, есть другой способ обработки ошибок в операторах отсрочки следующим образом:
func do() error {
res, err := http.Get("http://notexists")
if res != nil {
defer res.Body.Close()
}
if err != nil {
return err
}
// ..code...
return nil
}
С помощью приведенного выше кода, когда есть ошибка, код вернет ошибку, в противном случае он закроет res. Когда веселье c вернется в откладывание.
Вы можете посетить https://blog.learngoprogramming.com/5-gotchas-of-defer-in-go-golang-part-iii-36a1ab3d6ef1 для получения дополнительной информации об этом.