defer作用:
在函数中,程序员经常需要创建资源。为了在函数执行完成成及时的释放资源,Go的设计者提供了defer关键字。
在Golang中,程序遇到defer关键字,不会立即执行defer后的语句,而是将defer后的语句压入到一个栈中,然后继续执行函数后面的语句。
栈的特点:先进后出
recover作用:
捕获错误,恢复panic,使panic后面的语句能继续执行
因此可以利用defer+recover捕获错误,程序可以继续执行错误后面的语句。
defer func() {
//调用recover捕获错误:
err: = recover()
//如果没有捕获错误,返回值为零值nil
if err != nil {
fmt.Println("错误已经捕获")
fmt.Println("err: ",err)
}
实例如下: