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)
}
相关推荐
tyung8 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
ZHENGZJM10 小时前
架构总览:Monorepo 结构与容器化部署
架构·go·react·全栈开发
我叫黑大帅14 小时前
如何设计应用层 ACK 来补充 TCP 的不足?
后端·面试·go
ZHENGZJM15 小时前
认证增强:图形验证码、邮箱验证与账户安全
安全·react.js·go·gin
人间打气筒(Ada)2 天前
「码动四季·开源同行」go语言:如何使用 ELK 进行日志采集以及统一处理?
开发语言·分布式·elk·go·日志收集·分布式日志系统
王码码20354 天前
Go语言中的数据库操作:从sqlx到ORM
后端·golang·go·接口
小羊在睡觉4 天前
Go与MySQL锁:高并发开发实战指南
数据库·后端·mysql·go
先跑起来再说5 天前
Gin 从入门到实践:路由与 Context 深入解析
go·gin
小羊在睡觉5 天前
Reids缓存穿透、击穿、雪崩
redis·缓存·go
@atweiwei6 天前
深入解析gRPC服务发现机制
微服务·云原生·rpc·go·服务发现·consul