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)
}
相关推荐
明月_清风12 小时前
Go 没有 `class`,如何实现面向对象三要素?与传统 OOP 的深度对比
后端·go
审判长烧鸡13 小时前
【GO context 】上下文取消/超时的本质
go·context·上下文·ai问答
m0_5027249516 小时前
Go 语言 defer 在命名返回值 和 匿名返回值 函数中的表现不一样
go
java知路18 小时前
解决 Go 编译速度慢的问题
go
审判长烧鸡1 天前
【Go Interface】接口诞生的意义
go·接口·interface
审判长烧鸡1 天前
【Go i18n】TOML语言包
go·i18n·语言包
用户398346161202 天前
Go-Spring 实战第 10 课 —— 依赖注入的方式:字段注入和构造函数注入
spring·go
用户398346161202 天前
Go-Spring 实战第 9 课 —— IoC 容器:复杂 Go 应用如何统一对象装配
spring·go
审判长烧鸡2 天前
【Go Generics】泛型为何而生的
go·泛型·overload·重载·generics
用户398346161202 天前
Go-Spring 实战第 8 课 —— 变量引用与动态刷新:配置值如何复用和更新
spring·go