所以我有这个:
defer res.Body.Close()
问题在于此调用可能会返回非空错误。所以我认为正确捕获错误的唯一方法是
defer func(){
if err := defer res.Body.Close(); err !=nil {
log.Error(err);
}
}()
还有另一种方法吗?
最佳答案
你真的不能这样说err: = defer res.Body.Close ()
像这样。因此,该语句无效。
以下是有效的。
defer func(){
if err := res.Body.Close(); err !=nil {
log.Error(err);
}
}()
此外,还有另一种处理defer语句中的错误的方法,如下所示。
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.Body,当func延迟返回时。
您可以访问https://blog.learngoprogramming.com/5-gotchas-of-defer-in-go-golang-part-iii-36a1ab3d6ef1以获得更多信息。
关于go - 如何处理延缓语句中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61394454/