• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go语言里多线程使用recover捕获panic错误(防止一个子线程出错导致整个进程结束) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我们启动多线程时,可能某一个子线程的操作会出现不重要的panic错误(只需要打印日志即可,不用结束整个进程),这时我们就可以用recover来捕获panic错误,来进行处理,下面是具体实例:

 
package main

import (
    "fmt"
    "time"
    "runtime"
)

// 定义test函数
func test() {
    // 使用defer定义错误处理函数,recover捕获panic错误并处理,防止因为一个子线程出错导致主线程退出影响其他子线程工作
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("panic:",err)
        }
    }()

    var m map[string]int        // 定义map,没有初始化
    m["stu"] = 100            // 没有初始化map,执行赋值操作时会报错(panic)
}

// 定义calc函数
func calc() {
    for {
        fmt.Println("i'm calc")
        time.Sleep(time.Second)
    }
}

func main() {
    num := runtime.NumCPU()      // 获取cpu数量
    runtime.GOMAXPROCS(num - 1)   // 绑定总cpu数-1的cpu上执行
    go test()      // 启动线程执行test函数
    for i :=0; i < 5; i ++ {
        go calc()      // 启动两个线程执行calc函数
    }
    time.Sleep(time.Second*2)
}

/*
执行结果为:
i'm calc
i'm calc
i'm calc
i'm calc
i'm calc
panic: assignment to entry in nil map          // 没有因为这个panic影响其他线程
i'm calc
i'm calc
i'm calc
i'm calc
i'm calc
*/

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言 - 时间发布时间:2022-07-10
下一篇:
GO 协程发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap