go语言panic异常及recover拦截恢复初级

简介: go语言panic异常及recover拦截恢复初级 Go语言为我们提供了专用于“拦截”运行时panic的内建函数——recover。它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。

go语言panic异常及recover拦截恢复初级

Go语言为我们提供了专用于“拦截”运行时panic的内建函数——recover。它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。下面我们来看一下具体该怎么用

package main 
import "fmt"
func main()  {
    var a int =10
    //故意让10除以0
    var b int
    //recover应当放在可能出现的错误之前
    //通俗理解为宜未雨绸缪,不可亡羊补牢
    defer func() {
    //放在匿名函数里,err捕获到错误信息,并且输出
        err:=recover()
        if err!=nil {
            fmt.Println(err)
        }
    }()
    c:=a/b
    fmt.Println(c)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

以上可能大家还不能完全理解,下面再来一个稍微复杂一点点的例子

package main

import "fmt"

func test(i int)  {
    var arr [10]int
    //defer会延迟函数的执行,虽然立即调用了匿名函数,但是该匿名函数
    //不会执行,等整个main函数结束之前在去调用执行匿名函数
    defer func(){
        err:=recover()
        //nil为空的意思,如果不为空,贼表明捕获到了错误信息
        if err!=nil {
            fmt.Println(err)
        }
    }()
    arr[i]=123
    fmt.Println(arr)
}
//主函数开始调用,故意越界,但是程序并没报错,而是打印出了错误信息
func main() {
    test(10)
}
****以上则为recover最基础的用法****
原文地址https://blog.csdn.net/weixin_42940826/article/details/81587867
相关文章
|
22天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
22天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
94 71
|
21天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
101 67
|
2天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
28 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
13天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
22天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
35 7
|
24天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
93 62
|
22天前
|
存储 Go
go语言中映射
go语言中映射
33 11
|
24天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
32 12
|
23天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
29 9