阅读 107

小学生也能看懂的Golang异常处理recover panic

在其他语言里,宕机往往以异常的形式存在,底层抛出异常,上层逻辑通过 try/catch 机制捕获异常,没有被捕获的严重异常会导致宕机,go语言追求简洁,优雅,Go语言不支持传统的 try…catch…finally 这种异常

???? 专注Golang,Python语言,云原生,人工智能领域得博主
???? 过去经历的意义在于引导你,而非定义你,
???? 只要我们足够努力,任何人都有无限潜力

在这里插入图片描述

  • ????panic 抛出异常函数

  • ????recover 捕获异常函数

????1:在一个主协成内捕获异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
 
import (
    "fmt"
)
 
func main(){
 
    defer func(){
        err := recover()
        if err != nil{
            fmt.Println("捕获到异常")
        }
    }()
 
    panic("异常出现") //抛出异常,代表错误代码
 
}

????运行结果

在这里插入图片描述

????2:假设子协成内部错误,看看主协成能不能捕获到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main
 
import (
    "fmt"
)
 
func Calculate(){
     
    panic("异常出现"// 同样代表错误代码
}
   
func main(){
 
    defer func(){
        err := recover()
        if err != nil{
            fmt.Println("捕获到异常")
        }
    }()
 
    go Calculate()
     
    time.Sleep(time.Second*3//防止主协成过早退出,导致子协成没执行
 
}

????执行结果,主协成不能捕获到子协成的错误

在这里插入图片描述

????3:假设子协成错误需要自己捕获

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main
 
import (
    "fmt"
    "time"
)
 
func Calculate(){
 
    defer func(){
        err := recover()
        if err != nil{
            fmt.Println("协成内部捕获异常")
        }
    }()
 
    panic("异常出现")
}
   
func main(){
 
    go Calculate()
 
    time.Sleep(time.Second*3)
 
}

执行结果,成功捕获异常

在这里插入图片描述

到此这篇关于小学生也能看懂的Golang异常处理recover panic的文章就介绍到这了

原文链接:https://blog.csdn.net/weixin_43270713/article/details/120272891

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 

站长资源 https://www.cscnn.com/ 

小鱼创业 https://www.237fa.com/ 


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐