errors.Is in Go 1.13

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了errors.Is in Go 1.13相关的知识,希望对你有一定的参考价值。

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) {
    // ...
}
答案

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

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

以上是关于errors.Is in Go 1.13的主要内容,如果未能解决你的问题,请参考以下文章

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

go 1.13 环境变量配置

go 1.13的错误处理

构建aws-sdk-go的依赖关系在Go版本1.13上失败

golang 片段7 for https://medium.com/@francesc/why-are-there-nil-channels-in-go-9877cc0b2308

私人回购 - 去 1.13 - `go mod ..` 失败:ping “sum.golang.org/lookup” .. 验证包 .. 410 不见了