go语言里多线程使用recover捕获panic错误(防止一个子线程出错导致整个进程结束)
2021/5/25 7:28:43
本文主要是介绍go语言里多线程使用recover捕获panic错误(防止一个子线程出错导致整个进程结束),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我们启动多线程时,可能某一个子线程的操作会出现不重要的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 */https://www.cnblogs.com/hei-ma/articles/13441555.html
这篇关于go语言里多线程使用recover捕获panic错误(防止一个子线程出错导致整个进程结束)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-01got an unexpected keyword argument
- 2024-03-30维多利亚的秘密 golang入坑系统
- 2024-03-29mongodb sort by date
- 2024-03-29go swagger
- 2024-03-25mongodb cdc
- 2024-03-25how to use go in vscode
- 2024-03-22mongooseserverselectionerror: connect econnrefused ::1:27017
- 2024-03-21pymongo insert_many
- 2024-03-18projection mongodb
- 2024-03-14clickhouse-go