golang中异常处理

程序在运行过程中如果出现了问题,可以通过抛出异常、捕获异常来进行异常的处理,在golang中,异常的接口为error:

type error interface {
	Error() string
}

因此,只要一个结构体实现了Error() string方法,就是实现了error接口

type MyError struct {

}
func (err *MyError)Error() string{
	return "this is MyError"
}

golang中可以通过panic来抛出异常,recover来捕获异常。如果不处理异常,最终会是程序整个退出

另外**捕获异常必须在defer中进行捕获,否则捕获异常recover不起作用**


type MyError struct {

}
func (err *MyError)Error() string{
	return "this is MyError"
}

func PanicError()  {
	fmt.Println("panic error")
	panic(MyError{})
}

func main() {
	defer func(){
		if err := recover() ; err != nil {

			fmt.Println("catch error ",err)
		}
	}()

	PanicError()
}

defer的机制,有点类似于java中的finall语句块
go中多个defer语句与defer的顺序相反执行,可以理解是将defer放入到一个先进后出的队列中

你可能感兴趣的:(golang,golang,开发语言,后端)