• 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后 ,虽然出现越界问题,但程序仍能正常结束。

  • 相关阅读:
    java-数组
    java-条件判断和循环语句
    java-运算符
    python类与对象
    C#全角半角转换函数
    自己学会汉化DevExpress控件[转]
    DevExpress.XtraGrid的使用(部分)
    .Net 代码安全保护产品DNGuard HVM使用
    DataGridView 添加ComboBox
    c# 使用ChartDirector绘图的一些个人体会
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8365223.html
Copyright © 2020-2023  润新知