07 | 错误处理:如何通过 error、deferred、panic 等处理错误?

本文介绍了 Go 语言中的错误处理机制,包括 error 接口的使用、错误工厂函数、自定义 error、错误嵌套、Error Wrapping、Deferred 函数的错误处理、Panic 异常的抛出与 Recover 捕获。重点讲解了如何通过 error、defer、panic 等方式优雅地处理错误,确保程序的健壮性。
摘要由CSDN通过智能技术生成

07 | 错误处理:如何通过 error、deferred、panic 等处理错误?

错误

在 Go 语言中,错误是可以预期的,并且不是非常严重,不会影响程序的运行。对于这类问题,可以用返回错误给调用者的方法,让调用者自己决定如何处理。

error 接口

在 Go 语言中,错误是通过内置的 error 接口表示的。它非常简单,只有一个 Error 方法用来返回具体的错误信息,如下面的代码所示:

type error interface {
   
   Error() string
}

在下面的代码中,我演示了一个字符串转整数的例子:

func main() {
   
   i,err:=strconv.Atoi("a")
   if err!=nil {
   
      fmt.Println(err)
   }else {
   
      fmt.Println(i)
   }
}

这里我故意使用了字符串 “a”,尝试把它转为整数。我们知道 “a” 是无法转为数字的,所以运行这段程序,会打印出如下错误信息:

复制代码
strconv.Atoi: parsing “a”: invalid syntax
这个错误信息就是通过接口 error 返回的。我们来看关于函数 strconv.Atoi 的定义,如下所示:

func Atoi(s string) (int, error)

一般而言,error 接口用于当方法或者函数执行遇到错误时进行返回,而且是第二个返回值。通过这种方式,可以让调用者自己根据错误信息决定如何进行下一步处理。

小提示:因为方法和函数基本上差不多,区别只在于有无接收者,所以以后当我称方法或函数,表达的是一个意思,不会把这两个名字都写出来。

error 工厂函数

除了可以使用其他函数,自己定义的函数也可以返回错误信息给调用者,如下面的代码所示:

func add(a,b int) (int,error){
   
   if a<0 || b<0 {
   
      return 0,errors.New("a或者b不能为负数")
   }else {
   
      return a+b,nil
   }
}

add 函数会在 a 或者 b 任何一个为负数的情况下,返回一个错误信息,如果 a、b 都不为负数,错误信息部分会返回 nil,这也是常见的做法。所以调用者可以通过错误信息是否为 nil 进行判断。

下面的 add 函数示例,是使用 errors.New 这个工厂函数生成的错误信息,它接收一个字符串参数,返回一个 error 接口,这些在上节课的结构体和接口部分有过详细介绍,不再赘述。

sum,err:=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值