当前位置: 首页 > 编程笔记 >

GO语言异常处理机制panic和recover分析

干旺
2023-03-14
本文向大家介绍GO语言异常处理机制panic和recover分析,包括了GO语言异常处理机制panic和recover分析的使用技巧和注意事项,需要的朋友参考一下

本文实例分析了GO语言异常处理机制panic和recover。分享给大家供大家参考。具体如下:

Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部。一定要注意不要滥用 panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用。

golang 的错误处理流程:当一个函数在执行过程中出现了异常或遇到 panic(),正常语句就会立即终止,然后执行 defer 语句,再报告异常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函数,则会捕获错误信息,使该错误信息终止报告。

示例

package main

import (  "log"  "strconv" )

//捕获因未知输入导致的程序异常 func catch(nums ...int) int {  defer func() {   if r := recover(); r != nil {    log.Println("[E]", r)   }  }()

 return nums[1] * nums[2] * nums[3] //index out of range }

//主动抛出 panic,不推荐使用,可能会导致性能问题 func toFloat64(num string) (float64, error) {  defer func() {   if r := recover(); r != nil {    log.Println("[W]", r)   }  }()

 if num == "" {   panic("param is null") //主动抛出 panic  }

 return strconv.ParseFloat(num, 10) }

func main() {  catch(2, 8)  toFloat64("") }


输出如下:

2014/11/01 22:54:23 [E] runtime error: index out of range
2014/11/01 22:54:23 [W] param is null

希望本文所述对大家的GO语言程序设计有所帮助。

 类似资料:
  • 本文向大家介绍go语言异常panic和恢复recover用法实例,包括了go语言异常panic和恢复recover用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言异常panic和恢复recover用法。分享给大家供大家参考。具体分析如下: go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理 在一个主进程,多个go程处理逻辑的结

  • 主要内容:手动触发宕机,在运行依赖的必备资源缺失时主动触发宕机,在宕机时触发延迟执行语句Go语言的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等,这些运行时错误会引起宕机。 宕机不是一件很好的事情,可能造成体验停止、服务中断,就像没有人希望在取钱时遇到 ATM 机蓝屏一样,但是,如果在损失发生时,程序没有因为宕机而停止,那么用户将会付出更大的代价,这种代价可以是金钱、时间甚至生命,因此,宕机有时也是一种合理的止损方法。 一般而言,当宕机发生时

  • 主要内容:让程序在崩溃时继续执行,panic 和 recover 的关系Recover 是一个Go语言的内建函数,可以让进入宕机流程中的 goroutine 恢复过来,recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果,如果当前的 goroutine 陷入恐慌,调用 recover 可以捕获到 panic 的输入值,并且恢复正常的执行。 通常来说,不应该对进入 panic 宕机的程序做任何处

  • 前面介绍了异常的产生是不可避免的,那么为了保证程序有效地执行,需要对发生的异常进行相应的处理。 Java 的异常处理通过 5 个关键字来实现: try、 catch、 throw、 throws 和 finally。 try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的

  • 3.3.3 异常处理机制 那么,有没有办法使我们既能增强程序的健壮性,又不影响程序逻辑的清晰和完整呢? 现代编程语言提供了异常处理机制来解决这个问题。异常处理机制的基本思想是:程序运行 时如果发生错误,就“抛出”一个异常,而系统能够“捕获”这个异常并执行特定的异常处 理代码。图 3.7 中给出了异常抛出和捕获的示意图,从图中可见,异常实际上是一种可能改 变程序控制流的事件,使我们能跳出某个正常执行

  • 本文向大家介绍Go中recover与panic区别详解,包括了Go中recover与panic区别详解的使用技巧和注意事项,需要的朋友参考一下 概念 panic 与 recover 是 Go 的两个内置函数,这两个内置函数用于处理 Go 运行时的错误。 panic用于主动抛出错误, recover 用来捕获panic 抛出的错误。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支