8.4 panic和recover

一、panic

  1. 程序不知道如何处理的感觉

  2. 停止当前函数执行

  3. 一直向上返回,执行每一层的defer

  4. 如果没有遇见recover,程序退出

二、recover

  1. 仅在defer调用中使用

  2. 获取panic的值

  3. 如果无法处理,可重新panic

package main

import "fmt"

func tryRecover() {
	defer func() {
		err := recover()
		if err, ok := err.(error); ok {
			fmt.Println("error:", err)
		} else {
			panic(fmt.Sprintf("不知道的错误", err))
		}
    }()   // 需要加()
	panic("错误")
	// 
	// b := 0
	// a := 5 / b
	// fmt.Println(a)
}

func main() {
	tryRecover()
}

Last updated

Was this helpful?