如果延迟行在错误检查之前关闭,会发生什么

  • 本文关键字:延迟 错误 误检 如果 sql go
  • 更新时间 :
  • 英文 :


这是一个典型的用例。

rows, err := db.Query(`...`, ...)
if err != nil{
return
}
defer rows.Close()
...

这是我想要使用的。

rows, err := db.Query(`...`, ...)
defer rows.Close()
if err != nil{
return
}
...

我会感到恐慌吗?

它可能会恐慌,也可能不会恐慌。一般规则是始终首先检查返回的错误,如果是nil,则仅继续使用其他返回值。

如果您得到一个非nil错误,则其他返回值为";"未定义";,它们可能是nil,因此调用它们的方法可能很容易导致运行时死机。

当然,也可能有例外情况,通常会记录下来,例如,如果后续重定向失败,http.Get()可能会返回错误和非nil响应,并提供有关错误的详细信息。但这种情况很少见,应该经常记录下来。DB.Query()没有记录这样的偏差,所以你不能依赖它。

请参阅相关内容:如果在调用http时发生错误,我们是否需要关闭响应对象。获取(url(?

最新更新