go错误处理笔记

119 阅读2分钟

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」。

0 环境

1 错误

可预见的错误(掌握范围内的错误,返回错误,让开发者处理),不影响程序正常运行。

2 error

1 初识

strconv.Atoi当遇到"字母"会报错,不能转化,引文它需要是"数字"这类的。

image.png

image.png

也就说方法或函数,第二个返回值是一个error,只需要如上代码那般写,就可以获得错误。

image.png

2 自定义函数(带有错误返回值)

可以自定义函数或方法,将错误信息返回给调用方。

addHeight函数中,当最小高度和最高度的值有一项小于我们指定的条件值,就返回具体错误,若是满足条件,返回错误为nil

image.png

核心代码。

func addHeight(heightMin, heightMax int) (int, error) {
   if heightMin < 150 || heightMax < 180 {
      return 150,errors.New("heightMin不能小于150,heightMax不能小于180")
   } else {
      return heightMin + heightMax, nil
   }
}

func addHeightShow()  {
   hSum, error := addHeight(140,181)
   if error == nil {
      fmt.Println(hSum)
   } else {
      fmt.Println(error)
   }
}

func main() {
   addHeightShow()
}

调用addHeight函数,获得错误返回值。当错误返回值为空时,打印两值之和。否则打印具体错误信息。

image.png

3 自定义error

当我想错误拥有很多信息,比如可以满足提示错误码和错误信息以及其他需要,而上面的函数返回错误信息就力有不逮了。这里自定义error向我们招手了。

自定义一个结构体,加入两个字段,错误状态和错误信息。定义一个方法,返回错误信息errorMsg,这里Error()不能省略。最后在addHeight1中返回调用。

type universalError struct {
   // 错误状态
   errorStatus int
   // 错误信息
   errorMsg string
}

func (ue *universalError) Error() string  {
   return ue.errorMsg
}

func addHeight1(heightMin, heightMax int) (int, *universalError) {
   if heightMin < 150 || heightMax < 180 {
      return 150,&universalError{
         errorStatus: 400,
         errorMsg: "heightMin不能小于150,heightMax不能小于180",
      }
   } else {
      return heightMin + heightMax, nil
   }
}

func main() {
   fmt.Println(addHeight1(149,181))
}

image.png

3 小结

熟悉使用自带的错误信息,以及错误是否为空的判断,自定义函数带有返回错误信息,但是返回值满足我们的需求的时候,可以用自定义error。