go基础知识-defer/panic/recover

1.defer:将一个方法延迟到包裹该方法的方法返回时执行,

  • 包裹defer的函数返回时
  • 包裹defer的函数执行到末尾时
  • 所在的goroutine发生panic时

多个defer 载入是压栈,按照后进先出的原则执行。

然后用defer也需要避免一些坑

a.比如获取文件资源需要先判断是否不为err,然后再defer file.close();

b.defer在匿名返回值和命名返回值函数中的不同表现

 

2.panic:异常捕获,相当于catch

 

3.recover:异常恢复,这个必须要配合defer一起使用

 

案例:

func main(){
//defer
defer func() {
fmt.Println("defer one")
}()
defer func() {
fmt.Println("defer two")
}()

//panic
defer func() {
err1 := recover()
if err1 != nil {
fmt.Println(err1)
fmt.Println("捕获异常结束")
}
}()
//制造异常
var a = make([]int,0)
a[0] = 1
a[1]= 2

panic(errors.New("主动制造错误"))
}

结果:

runtime error: index out of range [0] with length 0
捕获异常结束
defer two
defer one

posted @   说好的你  阅读(190)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示