go - 如何处理延缓语句中的错误

标签 go

所以我有这个:

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/

相关文章:

go - rpc Call 方法是否在与服务器相同的 go routine 中运行?

regex - 在 Go Regex 中使用 Or | 组

go - Go中的make函数如何处理可选参数?

go - 无法处理 goroutine 死锁

golang with thrift 没有实现 thrift.TProcessorFunction(Process 方法的类型错误)

go - 如何使用Youtube Go API获取视频信息?

go - 等待一个协程完成

go - 如何更改结构变量内容?

go - golang中使用空白标识符导入的用例

c++ - 无法使用 const *C.char 参数导出 go 函数