程序在运行过程中如果出现了问题,可以通过抛出异常、捕获异常来进行异常的处理,在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放入到一个先进后出的队列中
本文介绍了Go语言中的异常处理方式,包括如何通过panic抛出异常和使用recover进行捕获。文中强调了捕获异常必须在defer语句中进行,并解释了defer的工作原理,将其比喻为Java中的finally语句块。同时,展示了自定义错误类型的实现和一个简单的异常处理示例。
563

被折叠的 条评论
为什么被折叠?



