错误在Go 1.13中

时间:2019-10-25 07:12:44

标签: go error-handling

Go 1.13为错误引入了新功能,以简化错误处理。在Go 1.13之前,我通过以下方式检查代码是否存在错误:

if err == nil {
    // ...
}

但是Go的errors.Is()帮助我正确地做到了:

  

这是明智的方式,可以使您的代码面向未来,并防止出现问题   由您(或您的代码导入的任何包)引起   未来的错误。

在这种情况下是可以的:

if errors.Is(err, sql.ErrNoRows) {
   // ...
}

这是否意味着我必须将所有err == nil语句更改为:

if errors.Is(err, nil) {
    // ...
}

2 个答案:

答案 0 :(得分:10)

不,你不知道。错误。检查基础错误值。如果某些代码返回sql.ErrNoRows并随后决定包装该错误,errors.Is(err,sql.ErrNoRows)会像以前一样继续工作,但是err == sql.ErrNoRows的计算结果为false。

nil错误值表示没有错误,因此没有要包装的内容。您无法编写任何代码来更改err!= nil的计算结果,同时仍然不返回任何错误。只有一种不返回错误的方法:无。

答案 1 :(得分:0)

不。不需要。当错误与目标匹配时,我们使用errors.Is(),如果它等于目标,则返回true。在您的情况下,err为nil,不能与目标一起使用。