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

  • 相关阅读:
    Hadoop TextInputFormat源码分析
    Hadoop集群(第6期)_WordCount运行详解
    spring boot之从零开始开发自己的网站
    transfer learning
    深度学习理论
    CNN卷积可视化与反卷积
    resnet
    NLP资料
    close Spark Streaming gratefully
    CUDA
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8365223.html
Copyright © 2020-2023  润新知