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)
}
相关推荐
不爱笑的良田5 小时前
从零开始的云原生之旅(十一):压测实战:验证弹性伸缩效果
云原生·容器·kubernetes·go·压力测试·k6
Java陈序员21 小时前
代码检测器!一款专门揭露屎山代码的质量分析工具!
docker·go
豆浆Whisky21 小时前
Go编译器优化秘籍:性能提升的黄金参数详解|Go语言进阶(16)
后端·go
不爱笑的良田1 天前
从零开始的云原生之旅(九):云原生的核心优势:自动弹性伸缩实战
云原生·容器·kubernetes·go
无限中终2 天前
ENERGY Designer:重构跨平台GUI开发的高效解决方案
重构·go·结对编程
shining3 天前
[Golang] 万字详解,深入剖析context
go
一语长情3 天前
Go高并发背后的功臣:Goroutine调度器详解
后端·架构·go
代码扳手3 天前
Go 开发的“热更新”真相:从 fresh 到真正的零停机思考
后端·go
cr7xin4 天前
缓存查询逻辑及问题解决
数据库·redis·后端·缓存·go
ljq4 天前
Go:interface原理详解-接口由使用者定义,而不是由实现者定义。接口的常见疑惑
go