zoukankan      html  css  js  c++  java
  • golang中recover和panic用法

    golang中没有try... catch...,所以当golang中遇到panic时,如果不进行recover,便会导致整个程序挂掉,具体例子如下:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	panic("fault")
    	fmt.Println("panic")
    }
    运行结果:
    panic: fault
      
      goroutine 16 [running]:...
    
    
    程序挂掉,并且报告出错的地方,并打印出掉用的栈


    解决办理:利用defer延迟处理的recover进行恢复,具体例子如下:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        defer func() {
            fmt.Println("1")
        }()
        defer func() {
            if err := recover(); err != nil {
                fmt.Println(err)
            }
        }()
        panic("fault")
        fmt.Println("2")
    }
    
    运行结果:
      fault
      1
     <span style="color:#FF0000;">
    </span>
    程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1.

    注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散.


  • 相关阅读:
    队列的定义与实现(C语言实现)
    在CTime类中重载&lt;&lt;和&gt;&gt;
    华为OJ:统计大写字母个数
    sql server smo
    应用服务器负载平衡集群
    存储过程如何执行的快速
    sql server 分布式事务
    代理服务器
    怎样实现数据库负载均衡集群
    多层插件开发框架
  • 原文地址:https://www.cnblogs.com/msnsj/p/4242581.html
Copyright © 2011-2022 走看看