Go语言使用defer+recover解决panic导致程序崩溃的问题
案例:如果我们起了一个协程,但这个协程出现了panic,但我们没有捕获这个协程,就会造成程序的崩溃,这时可以在goroutine中使用recover来捕获panic,进行处理,这样主线程不会受到影响。
【Go语言使用defer+recover解决panic导致程序崩溃的问题】代码如下:
package mainimport ( "fmt" "time")func sayHello(){ for i := 0; i < 10; i++ {time.Sleep(time.Second)fmt.Println("hello world") }}func test(){ //使用 defer + recover defer func() {//捕获test抛出的panicif err := recover(); err!=nil{fmt.Println("test发生错误",err)} }() //定义一个map var myMap map[int]string myMap[0] = "golang" //error}func main() { go sayHello() go test() for i := 0; i < 10; i++ {fmt.Println("main() ok=",i)time.Sleep(time.Second) }}
执行结果如下图:
文章图片
到此这篇关于Go语言使用defer+recover解决panic导致程序崩溃的问题的文章就介绍到这了,更多相关Go panic程序崩溃内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗