Go语言之错误和异常实例分析
导读:本文共2116字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:这篇文章主要介绍“Go语言之错误和异常实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言之错误和异常实例分析”文章能帮助大家解决问题。错误Go 语言通过内置的错误接口提供了非常简单的错误处理机制,Error 类型是一个接口类型。typeerrorinterface{Error()string}可以在编码中通过实现 error 接口类型来生成... ...
目录
(为您整理了一些要点),点击可以直达。这篇文章主要介绍“Go语言之错误和异常实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言之错误和异常实例分析”文章能帮助大家解决问题。
错误
Go 语言通过内置的错误接口提供了非常简单的错误处理机制,Error 类型是一个接口类型。
typeerrorinterface{Error()string}
可以在编码中通过实现 error 接口类型来生成错误信息。
函数通常在最后的返回值中返回错误信息。
//定义一个DivideError结构typeDivideErrorstruct{divideeintdividerint}//实现`error`接口func(de*DivideError)Error()string{strFormat:=`Cannotproceed,thedivideriszero.dividee:%ddivider:0`returnfmt.Sprintf(strFormat,de.dividee)}funcDivide(varDivideeint,varDividerint)(resultint,errorMsgstring){ifvarDivider==0{dData:=DivideError{dividee:varDividee,divider:varDivider,}errorMsg=dData.Error()return}else{returnvarDividee/varDivider,""}}
Divide 函数传入除数和被除数,当被除数为零时,函数抛出异常。
ifresult,errorMsg:=Divide(100,10);errorMsg==""{fmt.Println(result)}
这是正常情况下。
当除数为零的时候会返回错误信息。
if_,errorMsg:=Divide(100,0);errorMsg!=""{fmt.Println("errorMsgis:",errorMsg)}
异常
Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。这些运行时错误会引起painc异常。
当程序发生异常时,无法继续运行,使用panic
来终止程序。
应该尽可能地使用错误,而不是使用panic
和recover
。只有当程序不能继续运行的时候,才应该使用panic
和recover
机制。
panic
有两个合理的用例:
发生了一个不能恢复的错误,此时程序不能继续运行。
发生了一个编程上的错误。一个接收指针参数的方法,而其他人使用
nil
作为参数调用了它。在这种情况下,可以使用panic
,因为这是一个编程错误:用nil
参数调用了一个只能接收合法指针的方法。
内建函数panic
:
funcpanic(vinterface{})
当程序终止时,会打印传入panic
的参数。
packagemainfuncmain(){panic("panicerror")}
会打印出传入panic
函数的信息,并打印出堆栈跟踪。
recover
是一个内建函数,用于重新获得panic
协程的控制。
funcrecover()interface{}
recover
必须在defer
函数中才能生效,在延迟函数内调用recover
,可以取到panic
的错误信息,并且停止panic
续发事件。只有在相同的协程中调用recover
才管用,recover
不能恢复一个不同协程的panic
。
packagemainimport"fmt"funcoutOfArray(xint){deferfunc(){//recover()可以将捕获到的panic信息打印iferr:=recover();err!=nil{fmt.Println(err)}}()vararray[5]intarray[x]=1}funcmain(){//故意制造数组越界触发panicoutOfArray(20)//如果能执行到这句说明panic被捕获了//后续的程序能继续运行fmt.Println("main...")}
关于“Go语言之错误和异常实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
Go语言之错误和异常实例分析的详细内容,希望对您有所帮助,信息来源于网络。