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)
}
相关推荐
我的div丢了肿么办1 天前
go语言中管道 channel的使用
后端·go
海宇数科1 天前
Go数据工程:利用海宇婚恋风险报告优化实名制严肃婚恋交友合规体验
人工智能·go
用户125758524361 天前
Golang Web后台管理框架推荐:Gin、GoFrame与数据面板项目怎么分
go
我的div丢了肿么办1 天前
进程和线程以及go语言中的协程
后端·go
福兮说3 天前
Go time 包的九个坑:== 判断相等、Parse 差 8 小时、1 月 31 日加一个月变成 3 月 3 日
go
我的div丢了肿么办3 天前
go语言中的空接口和类型断言
后端·go
Thinker QAQ3 天前
并发编程(七):volatile——从语言规则到 CPU
java·python·go·并发编程·volatile·memory model
ZealSinger4 天前
Go1.25 FlightRecorder慢请求截trace
网络·数据库·go
福兮说4 天前
Go 迭代器的七个坑:break 后 panic、一次性迭代器、iter.Pull 不 stop,还有一个跑错地方的 defer
go
ThinkerQAQ_4 天前
并发编程(七):volatile——从语言规则到 CPU
java·python·go