使用defer recover解决panic导致程序崩溃的问题


案例 :如果我们起了一个协程,但这个协程出现了panic,但我们没有捕获这个协程,就会造成程序的崩溃,这时可以在goroutine中使用recover来捕获panic,进行处理,这样主线程不会受到影响。

代码如下:

package main

import (
    "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抛出的panic
        if 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)
    }
}

执行结果如下图:

使用defer recover解决panic导致程序崩溃的问题 介绍到这里,更多Go学习请参考编程字典Go教程 和问答部分,谢谢大家对编程字典的支持。


原文链接:https://blog.csdn.net/cui_yonghua/article/details/94739645?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163480011616780274138504%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163480011616780274138504&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-29-94739645.pc_v2_rank_blog_default&utm_term=go&spm=1018.2226.3001.4450