zoukankan      html  css  js  c++  java
  • golang panic的捕获

    panic发生时, 会导致进程挂掉。为了处理panic, 可以使用recover捕获,然后处理。

    下面以下标引用越界问题为例进行说明。

    正常情况下,代码中如果出现下标越界,会直接触发panic, 导致进程挂掉。
    例如下面的例子:

    package main
    
    import (
            "fmt"
    
    )
    
    
    func main() {
            fmt.Println("start...")
    
            count := []int{}
            fmt.Println(count[1])
    
            fmt.Println("1...")
    
    }
    

    output:

    start...
    panic: runtime error: index out of range

    goroutine 1 [running]:
    main.main()
    D:/work/go_exercise/t.go:29 +0xd4

    recover的使用

    进程crash后,无法再提供服务,必须设法避免。
    Go语言中提供recover可以用于捕获panic。
    当对某些代码质量问题存在疑问时,可使用recover进行异常处理。

    package main
    
    import (
            "fmt"
    
    )
    
    
    func main() {
            defer func(){
    
                    if r := recover(); r != nil {
                            fmt.Println("recover...:", r)
                    }
            }()
    
            fmt.Println("start...")
    
            count := []int{}
            fmt.Println(count[1])
    
            fmt.Println("1...")
    
    }
    

    output:

    start...
    recover...: runtime error: index out of range

    使用recover后 ,虽然出现越界问题,但程序仍能正常结束。

  • 相关阅读:
    Git 9. 远程仓库
    Git 8. 删除文件
    Git 7. 撤销修改
    # 并发编程 -进程理论-进程的方法
    socket 上传 -- 异常处理--UDP协议 --自定义socket #29
    socket(套接字)
    面向过程补充 网络编程 #27
    ATM
    选课系统 -- # 25 -26
    面向对象高级 1.反射 2.元类 # 24
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8365223.html
Copyright © 2011-2022 走看看