错误在Go 1.13中

Ali*_*dov 4 error-handling go

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

if err == nil {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是Go errors.Is()可以帮助我正确地做到这一点:

这是一种明智的方式,可用于将来对代码进行过时验证,并防止由您(或代码导入的任何程序包)引起的问题在将来包装错误。

对于这种情况,这是可以的:

if errors.Is(err, sql.ErrNoRows) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

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

if errors.Is(err, nil) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 10

不,你没有。错误。检查基础错误值。如果某些代码返回sql.ErrNoRows并随后决定包装该错误,则errors.Is(isr(sql,ErrNoRows)继续像以前一样工作,但是err == sql.ErrNoRows将评估为false。

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

  • 此外,当 err 为 nil 时,errors.Is(err, nil) 可能并不总是返回 true:https://play.golang.org/p/X2Qy_AGaWD4 (2认同)