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)

}

实例如下:

defer+recover恢复机制_defer+recover