go语言-error接口的应用 显式调用panic 数组越界导致panic recover的使用(十七)

error接口的应用

package main

import (
	"errors"
	"fmt"
)

func MyDiv(a, b int) (result int ,err error) {

	err = nil
	if b == 0 {
		err = errors.New("1/0 is error")
	} else {
		result = a / b
	}

	return result, err
}

func main() {
	result, err := MyDiv(1, 0)

	if err != nil {
		fmt.Println("result err = ", err)
	} else {
		fmt.Println("result = ", result)
	}
}

 显式调用panic函数

在通常情况下,向程序使用方报告错误状态的方式可以是返回一个额外的enor类型值。但是,当遇到不可恢复的借误状态的时候,如数组访问越界、空指针引用券,这些运行时错误会引起painc异常。这时,上述错误处理方式显然就不适合了。反过来讲,在一般情况下,我们不应通过调川panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时,我们就应该调用panic。一般而言,当panic异常发牛.时,程序会中断运行,并立即执行在该goioutine (可以先理解成线程,在中被延迟的函数(defer机制)。随后,程序崩溃并输出口志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。

func testb()  {
	//显式调用panic函数,导致程序中断
	panic("this is a panic test")
}

func testc() {
	fmt.Println("cccccccccccc")
}

func main() {
	testb()
	testc()
}

数组越界导致panic

func testd(x int)  {
	var a [4]int
	a[x] = 3
}
func teste()  {
	fmt.Println("eeeeeeeeeeee")
}

func main() {
	testd(5)
	teste()
}

输出错误

panic: runtime error: index out of range

 

recover的使用


func testd(x int)  {

	//设置recover
	defer func () {
		//recover()  //可以打印panic的错误信息
		var err = recover()
		if err != nil { //产生裸panic一场
			fmt.Println("err:" , err)
		}
		/*if err:=recover(); err != nil {
			fmt.Println("err:" , err)
		}*/

	}() //()作用 调用此匿名函数

	var a [4]int
	a[x] = 3
}
func teste()  {
	fmt.Println("eeeeeeeeeeee")
}

func main() {
	testd(5)
	teste()
}

输出 

err: runtime error: index out of range
eeeeeeeeeeee

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页