乐趣区

关于go:Go-快速入门指南-recover

概述

倡议先浏览 defer 大节。

recover 会终止 panic 状态并且返回 panic 的值,函数会从 panic 之前执行到的中央间接返回,不会持续往下执行。

语法规定

**recoverdefer 必须配套应用, 如果 recover 在其余中央执行会返回 nil,不会产生任何成果。
defer 必须在 panic 之前申明,否则 panic 会间接终止程序。**

例子

谬误捕捉

package main

import "fmt"

func main() {if r := recover(); r != nil {fmt.Printf("捕捉到 1 个谬误: %v\n", r)
    }

    panic("测试")

    println("程序执行不到这里")
}

// $ go run main.go
// 输入如下 
/**
  panic: 测试
  ...
  ...
  exit status 2
*/

正确捕捉

package main

import "fmt"

func main() {defer func() {if r := recover(); r != nil {fmt.Printf("捕捉到 1 个谬误: %v\n", r)
        }
    }()

    panic("测试")

    println("程序执行不到这里")
}

// $ go run main.go
// 输入如下 
/**
  捕捉到 1 个谬误: 测试
*/

分割我

退出移动版