Go语言,panic和recover 遇到错误继续处理

在go语言中,如果报错了,会终止程序继续往下操作,可以使用panicrecover实现挽救要终止的进程

使用panic可以控制代码在什么阶段停止

注意:
1、recover()必须搭配defer使用
2、defer 一定要在可能引发panic的语句之前定义

package main

import "fmt"

func a() {
	fmt.Println("a 函数")
}

func b() {
	panic("b error")
}

func c() {
	fmt.Println("c 函数")
}
func main() {
	a()
	b()
	c()
}

输出结果:

a 函数
panic: b error

goroutine 1 [running]:
main.b(...)
        D:/go project/test/for.go:9
main.main()
        D:/go project/test/for.go:17 +0xa5
exit status 2

当运行在第二个函数时,遇到panic会终止程序继续运行

接下来使用recover挽救程序

package main

import "fmt"

func a() {
	fmt.Println("a 函数")
}

func b() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("b 函数")
		}
	}()
	panic("b error")
}

func c() {
	fmt.Println("c 函数")
}
func main() {
	a()
	b()
	c()
}

运行结果:

a 函数
b 函数
c 函数

整个代码当运行到b()时,会处理defer语句,它的作用是先执行正常代码,最后执行defer语句中的代码,即先执行panic再执行defer,在执行defer时,遇到recover挽救func b函数,判断是否有错误,如果err不等于nil,就代表之前代码遇到错误了,执行fmt.Println("b 函数")

可用于场景:
1、需要执行多个服务时,如果一个服务出错了,继续执行接下来的服务,打印出错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

登云时刻

整理不易,请个辣条吃吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值