遇到panic异常,导致程序崩溃。

新上的项目,在运行一段时间后,会出现自动崩溃的情况。从日志没有看出任何错误(使用logger包进行打印的日志)。每次崩溃的前夕,程序一直在正确的运行(崩溃)。前几天程序又出错,恰巧调用接口也发现不能调用。于是得出在日志文件中可能没有打印错误日志。于是联想到模拟调接口异常,看看是否能将错误日志写入到日志文件中。果不其然,不能。只能在本地的控制台中,看到,并且发现程序调接口出错后,程序自动宕了。所以想着把这个错误日志也写入到日志文件中,以避免因为出错,是程序出现宕机的情况。

go 语言中不能像java中可以使用try/catch 捕获异常,然后程序正常的运行。在go中,如果程序要到panic。程序就会自动崩溃,如果这样的话。在一个运行的系统中是致命的。如何避免呢!

(1)在进行错误判断的时候,在err中添加return。(具体原理不清楚,例子就是这么写的,但在程序中经常忘记添加return,就会出现程序崩溃)

if err != nil{
   logger.Info("err=",err)
   return //如果在没有添加return的时候,如果这个错误是panic,程序就会崩溃
}

在加了return的时候,程序出错后,并不报panic,而且是正常的结束

在没有添加return的时候,程序会报出panic错误并且程序异常停止。(这种情况在一个正在运行的程序中是致命的)

(2)第二种,使用recover,来恢复程序。

  recover :恢复的意思,recover一般用在defer()中,通过recover来终止一个goroutine的panicking过程,从而恢复正常代码的运行(也符合系统的要求)

 

func main(){
	defer func() {
		if err:= recover();err != nil{
			logger.Info("test发生错误",err)
		}
	}()
        
        var str ="123"
        in,err:=strconv.Atoi(str)
        logger.Info("in==",in)
        if err!= nil{
           logger.Info("err==",err)//假如有异常的时候,defer中的recover()就会恢复程序
        }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

duolezengjie

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值