错误处理panic和recover

本文探讨了Go语言中panic和recover的错误处理机制,以及与os.Exit的区别。panic会导致程序停止执行并执行deferred函数,而recover用于捕获并处理panic。os.Exit则直接退出程序,不执行defer。使用recover时应注意正确处理错误,避免忽视错误导致服务异常。文章还提到了错误恢复策略和let it crash模式在不可预测错误处理中的应用。
摘要由CSDN通过智能技术生成

错误处理之panic和recover

panic

//panic用于不可以恢复的错误
//panic退出前会执行defer指定的内容 
//defer 延迟执行函数 函数返回前才会执行到defer这个函数 一般用作资源清理/释放锁


//os.Exit
//os.Exit退出的时候不会调用defer指定的函数
//os.Exit退出的时候不输出当前调用栈信息

recover

//不希望程序在抛出异常后中断或者退出 捕捉异常
//panic里面传递的错误,返回给recover 
//使用recover 主要是做程序恢复的工作

//使用之后,没有打印调用栈,程序也没有异常退出
//小心使用,避免错误的使用错误恢复机制

//recover修复方式带来的危害 不看错误不改错 记录了一下忽略掉了
//形成僵尸服务进程,导致health check失效
//Let it crash 是回复不确定性错误的方法  可恢复的设计模式

代码

package panic_recover_test

import (
	"errors"
	"fmt"
	"os"
	"testing"
)

func TestPanicVxExit(t *testing.T){
	defer func() {
		if err:= recover();err != nil{
			fmt.Println("recover from",err)
		}
	}()

	fmt.Println("Strat")
	//panic通常会传递一个空接口 一般是一个错误信息
	panic(errors.New("Something wrong!"))
	os.Exit(-1)
	fmt.Println("End")
	//主要区别 panic会显示调用栈信息 os.Exit会返回状态码,但是不打印堆栈信息
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值