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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)