小学生也能看懂的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