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丢了肿么办6 小时前
go语言中的空接口和类型断言
后端·go
Thinker QAQ9 小时前
并发编程(七):volatile——从语言规则到 CPU
java·python·go·并发编程·volatile·memory model
ZealSinger11 小时前
Go1.25 FlightRecorder慢请求截trace
网络·数据库·go
福兮说11 小时前
Go 迭代器的七个坑:break 后 panic、一次性迭代器、iter.Pull 不 stop,还有一个跑错地方的 defer
go
ThinkerQAQ_11 小时前
并发编程(七):volatile——从语言规则到 CPU
java·python·go
墨鱼老师13 小时前
Go+Gin+Vue 毕设项目:Gin 框架搭建后端基础接口实战
vue.js·golang·go·gin·前后端分离·计算机毕业设计·go 后端
福兮说1 天前
Go slices 包的七个坑:Delete 把旧切片清零、Insert 时而写穿、SortFunc 不稳定(Go 1.25 实跑)
go
我的div丢了肿么办2 天前
go语言中如何安装第3方的包
后端·go
tachibana23 天前
与其他语言相比,使用 Go 有什么好处?
开发语言·后端·golang·go
JWASX3 天前
Java 转 go 学习 - 项目管理
go