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 @ 2022-03-04 21:06  说好的你  阅读(205)  评论(0)    收藏  举报