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

浙公网安备 33010602011771号