错误。在Go 1.13中

错误。在Go 1.13中,go,error-handling,Go,Error Handling,Go 1.13为错误引入了新功能,以简化错误处理。在Go 1.13之前,我通过以下方式检查代码是否存在错误: if err == nil { // ... } 但是Go的错误。Is()帮助我正确地执行: 这是一种明智的方法,可以对代码进行未来验证并防止出现问题 由您(或您的代码导入的任何包)包装引起的 未来的错误 在这种情况下也可以: if errors.Is(err, sql.ErrNoRows) { // ... } 这是否意味着我必须将所有err==nil语句更改为: i

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

if err == nil {
    // ...
}
但是Go的
错误。Is()
帮助我正确地执行:

这是一种明智的方法,可以对代码进行未来验证并防止出现问题 由您(或您的代码导入的任何包)包装引起的 未来的错误

在这种情况下也可以:

if errors.Is(err, sql.ErrNoRows) {
   // ...
}
这是否意味着我必须将所有
err==nil
语句更改为:

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

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


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

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

您的意思是
!错误。是(err,nil)
?@mkopriva,是的,你是对的。我已经更新了我的问题:
err!=nil
已更改为
err==nil
此外,
errors.Is(err,nil)
err
nil
时,可能并不总是返回
true