IT评测·应用市场-qidao123.com

标题: Go语言入门10(异常处理) [打印本页]

作者: 民工心事    时间: 2023-4-23 14:51
标题: Go语言入门10(异常处理)
异常处理

panic 异常处理

​        如果出现了panic异常,那么会停止当前函数的运行,然后会找recover()方法,如果没有的话,就会报错退出程序,如果有就会执行recover的方法体中的方法
​        我们可以使用defer延迟处理函数来捕获panic异常,用recover()来从错误场景中恢复,必须的在defer修饰的方法中使用,不然不生效,panic抛出异常,defer具备延迟处理功能,所以最后这种兜底的活只能defer来做
  1. // 定义一个带有panic异常的方法
  2. func Test01(tmp int) string {
  3.         fmt.Println("This is a test!")
  4.         // 如果传入的参数是负数,那么就会抛出panic异常   
  5.         if tmp <= 0 {
  6.                 panic("不能传递非正数")
  7.         }
  8.         return "这是一个正数"
  9. }
  10. func main() {
  11.     // 使用defer + recover来兜底
  12.         defer func() {
  13.                 err := recover()
  14.                 if err != nil {
  15.                         fmt.Println(err)
  16.                 }
  17.         }()
  18.         fmt.Println(Test01(-1))
  19.     // 由于panic异常会停止当前函数运行,所以下面的输出不会被执行
  20.         fmt.Println("异常处理之后")
  21. }
复制代码
自定义异常
  1. // 返回值要声明error类型
  2. func Test02(tmp int) (res string, err error) {
  3.         if tmp > 0 {
  4.         // 如果正常输出,也需要返回nil
  5.                 return "这是正数", nil
  6.         } else {
  7.         // 使用函数创建error异常
  8.                 err := errors.New("不能传递非正数!")
  9.                 return "", err
  10.         }
  11. }
  12. func main() {
  13.         res, err := Test02(34)
  14.         if err != nil {
  15.                 fmt.Println("出现错误:", err)
  16.         } else {
  17.                 fmt.Println("传参正确:", res)
  18.         }
  19.     // error异常不会中断运行,下面的输出会被执行
  20.     fmt.Println("异常处理之后")
  21. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4