Go语言之错误和异常实例分析(go语言,开发技术)

时间:2024-04-30 02:16:27 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

这篇文章主要介绍“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来终止程序。

应该尽可能地使用错误,而不是使用panicrecover。只有当程序不能继续运行的时候,才应该使用panicrecover机制。

panic有两个合理的用例:

  • 发生了一个不能恢复的错误,此时程序不能继续运行。

  • 发生了一个编程上的错误。一个接收指针参数的方法,而其他人使用nil作为参数调用了它。在这种情况下,可以使用panic,因为这是一个编程错误:用nil参数调用了一个只能接收合法指针的方法。

内建函数panic

funcpanic(vinterface{})

当程序终止时,会打印传入panic的参数。

packagemainfuncmain(){panic("panicerror")}

Go语言之错误和异常实例分析

会打印出传入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语言之错误和异常实例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java重要的关键字有哪些下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18