panic recover

当在一个函数执行过程中调用panic()函数时,正常的函数执行流程将立即终止,但函数中 之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致 逐层向上执行panic流程,直至所属的goroutine中所有正在执行的函数被终止。

 例:

defer func() {
	if r := recover(); r != nil {
		log.Printf("Runtime error caught: %v", r)
	}
}()
getPlateLevelInfo := func(plateSN int64, userID int, commentDataResp *response.CommentDataResp) {
	if plateSN != 0 {
		plateDetail, _ := GetPlateDetail(plateSN, strconv.Itoa(userID))
		if plateDetail != nil {
			if *plateDetail.IsFollow == 1 {
				levelInfo := &model.PlateLevelInfo{
					Level:             int(*plateDetail.LevelInfo.Level),
					LevelName:         *plateDetail.LevelInfo.LevelName,
					Experience:        int(*plateDetail.LevelInfo.Experience),
					UpgradeExperience: int(*plateDetail.LevelInfo.UpgradeExperience),
					LevelIcon:         *plateDetail.LevelInfo.LevelIcon,
					FullLevel:         *plateDetail.LevelInfo.FullLevel,
				}
				commentDataResp.PlateLevelInfo = levelInfo
			}
		}
	}
}

-------------------------------
defer func() {
 if r := recover(); r != nil {
 log.Printf("Runtime error caught: %v", r)
 }
}()  //紧在foo函数的上方使用
foo()

更多:https://www.jianshu.com/p/0cbc97bd33fb

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值