defer+recover机制处理错误

问题:多个协程工作,其中一个协程出现panic,导致程序崩溃

解决办法:利用defer+recover捕获panic进行处理,即使协程出现错误,主线程仍然不受影响可以继续执行

Go 复制代码
package main

import (
	"fmt"
	"time"
)

func main() {

	go printNum()
	go devide()

	time.Sleep(time.Second * 5)
}

// 输出数字
func printNum() {
	for i := 1; i <= 10; i++ {
		fmt.Println(i)
	}
}

// 除法操作
func devide() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("devide()出现错误:", err)
		}
	}()
	num1 := 10
	num2 := 0
	result := num1 / num2
	fmt.Println(result)
}
相关推荐
我叫黑大帅1 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go
福兮说12 小时前
Go 优雅退出:Shutdown 之后,后台 goroutine 还在跑(四个实测的坑)
后端·go
jeffwang13 小时前
不装分词插件,用 PostgreSQL 做中文商品搜索:bigram + 向量 + RRF,以及「单字搜不到」这个坑
搜索引擎·postgresql·go
云浪15 小时前
通过 Goroutine 搞懂 Go 并发与常见的 9 个坑
后端·go
福兮说20 小时前
singleflight 防缓存击穿,这四个坑它不会替你挡
go
我的div丢了肿么办20 小时前
自定义类型和类型别名以及实例化结构体的5种方式
后端·go
小满zs20 小时前
Go语言第十三章(互斥锁,读写锁)
后端·go
福兮说20 小时前
errgroup 的六个坑:Wait 之后 ctx 已取消、SetLimit 嵌套死锁,以及另外四个
后端·go
福兮说20 小时前
Go 解析邮件的三个坑:GBK 标题、QP 正文,以及 NextPart 偷偷帮你做的事
后端·go
我的div丢了肿么办20 小时前
go语言中的时间time
后端·go