当前位置: 首页 > news >正文

茂名公司网站制作招全国代理经销

茂名公司网站制作,招全国代理经销,建设网站的方案,汕头网站制作Go语言异常处理 异常处理error接口panicrecover延时调用错误问题 异常处理 error接口 Go语言引入了一个关于错误处理的标准模式 它是Go语言内建的接口类型 它的定义如下 type error interface {Error() string }Go语言的标准库代码包errors为用户提供了以下方法 package e… Go语言异常处理 异常处理error接口panicrecover延时调用错误问题 异常处理 error接口 Go语言引入了一个关于错误处理的标准模式 它是Go语言内建的接口类型 它的定义如下 type error interface {Error() string }Go语言的标准库代码包errors为用户提供了以下方法 package errors type errorString struct { text string }func New(text string) error { return errorString{text} }func (e *errorString) Error() string { return e.text }另一个可以生成 error 类型值的方法是调用 fmt 包中的 Errorf 函数 package fmt import errors func Errorf(format string, args ...interface{}) error { return errors.New(Sprintf(format, args...)) }下面是代码示例 import ( errors fmt ) func main() { var err1 error errors.New(a normal err1) fmt.Println(err1) //a normal err1 var err2 error fmt.Errorf(%s, a normal err2) fmt.Println(err2) //a normal err2 }一般来说 错误处理位于函数的最后 下面是代码示例 import ( errors fmt )func Divide(a, b float64) (result float64, err error) { if b 0 { result 0.0 err errors.New(runtime error: divide by zero) return } result a / b err nil return } func main() { r, err : Divide(10.0, 0) if err ! nil { fmt.Println(err) //错误处理 runtime error: divide by zero } else { fmt.Println(r) // 使用返回值 } }panic 通常情况下 我们报错时可以返回一个error值 但是如果我们遇到了不可恢复的异常 比如说数组越界访问 空指针引用等 此时就会引发panic异常 一般而言 当当panic异常发生的时候 该程序会立刻停止运行 并且立即执行在该goroutine我们这里暂时理解为线程下的defer的函数 随后 程序崩溃并输出日志信息 日志信息包括panic value和函数调用的堆栈跟踪信息 此外需要注意的是 并不是所有panic异常都来自运行时 我们主动调用panic函数也会引起panic异常 panic函数可以接受任何值作为参数 func panic(v interface{})下面是代码和结果演示 package mainimport fmtfunc testA() {fmt.Println(testA ~~~) }func testB() {panic(panic error ~~~) }func testC() {fmt.Println(testC ~~~) }func main() {testA()testB()testC() } 我们发现前面的函数顺序执行完毕之后到panic异常 当然如果我们自己主动写点bug比如说数组越界 除0错误 效果也是一样的 recover 程序运行时 只要引发了panic异常就会引发程序崩溃 这是我们怎么都不愿意看到的 因此Go语言给我们提供了一种专门拦截运行时异常的内建函数 – recover 它可以使程序从panic状态恢复并获得流程控制权 注意 recover只有在defer调用的函数中有效 如果说调用了内置函数decover并且定义该defer语句的函数发生了panic异常 recover会从panic中恢复 并且返回panic和vlaue 导致panic异常的函数不会正常运行 但会正常返回 但是在未发生panic时调用recover recover会返回nil 代码演示如下 package mainimport fmtfunc testA() {fmt.Println(testA ~~~) }func testB() (err error) {defer func() {if x : recover(); x ! nil {// 此时panic和value被添加到x中err fmt.Errorf(internal error: %v, x)}}()panic(panic error ~~~)return err }func testC() {fmt.Println(testC ~~~) }func main() {testA()err : testB()fmt.Println(err)testC() }我们依旧是在test2中主动调用了panic异常 只不过我们在前面延时调用了一个匿名函数 defer func() {if x : recover(); x ! nil {// 此时panic和value被添加到x中err fmt.Errorf(internal error: %v, x)}}()在这个匿名函数中我们调用了recover函数 并且接受了err 最终我们可以发现我们的程序正常运行下去了 延时调用错误问题 如果我们在延时调用中也引发了panic异常 那么该panic异常可以被后续延时调用的recover捕获 代码和结果演示如下 func test() {defer func() {fmt.Println(recover())}()defer func() {panic(test2)}()panic(test1) }func main() {test() }此时我们的recover捕获的错误就不是test1 而是 test2
http://www.pierceye.com/news/929027/

相关文章:

  • 茌平网站建设哪个地方可学习网站建设
  • 便民的网站app怎么做acg的wordpress主题
  • 外贸网站高端定做网络营销培训
  • 电子通讯录网站建设08影院wordpress影视主题源码
  • 电商设计素材网站推荐然后建设自营网站
  • 网站方案设计网页兼容性 网站开发
  • 做网站怎么申请域名游戏软件开发需要学什么
  • 做外贸网站需要什么卡创app开发 杭州app开发公司
  • 哪个网站可以做视频外链怎样退订3d卫星街景会员费用
  • 烟台做网站建设电话设置网站默认编码
  • seo官网制作规划绍兴seo整站优化
  • 怎么做网站广告设计学习
  • 邵东平台网站建设中山手机台app
  • 学什么可以做网站免费qq空间网站
  • 网站套餐到期啥意思电子商务电商网站饿建设
  • 电商网站零售客户重庆旅游景点
  • 建设银行成都官网招聘网站自主建网站
  • 云南省建设厅定额网站房地产开发公司是做什么的
  • 哪个网站卖自己做的手工艺品有哪些好的做网站公司好
  • 做电影网站用什么主机好最新网站域名
  • 唐山做网站公司汉狮价格搜索引擎禁止的方式优化网站
  • 做视频网站视频常见网站安全漏洞
  • 苏州企业名录黄页新乡网站自然优化
  • 有哪些建设网站公司网站建设需求单
  • 招聘网站做销售用手机网站做app
  • 做一个网站 多少钱撤销网站备案
  • 建设网站的流程图企业工资管理系统软件
  • 个人网站空间大小可以做网站的语言
  • 网站设计需要哪些技术wap购物网站源码
  • 一个空间两个php网站新能源车排名前十名