• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用golang实现封装trycatch异常处理实例代码

    前言

    社区不少人在谈论 golang 为毛不用trycatch模式,而采用苛刻的recovery、panic、defer组合….    从网上整了一个trycatch包,感觉不错,拿出来分享下…下面话不多说,来一起看看详细的介绍。

    示例代码

    package main
     
    import (
     "reflect"
    )
     
    type TryCatch struct {
     errChan  chan interface{}
     catches  map[reflect.Type]func(err error)
     defaultCatch func(err error)
    }
     
    func (t TryCatch) Try(block func()) TryCatch {
     t.errChan = make(chan interface{})
     t.catches = map[reflect.Type]func(err error){}
     t.defaultCatch = func(err error) {}
     go func() {
     defer func() {
     t.errChan - recover()
     }()
     block()
     }()
     return t
    }
     
    func (t TryCatch) CatchAll(block func(err error)) TryCatch {
     t.defaultCatch = block
     return t
    }
     
    func (t TryCatch) Catch(e error, block func(err error)) TryCatch {
     errorType := reflect.TypeOf(e)
     t.catches[errorType] = block
     return t
    }
     
    func (t TryCatch) Finally(block func()) TryCatch {
     err := -t.errChan
     if err != nil {
     catch := t.catches[reflect.TypeOf(err)]
     if catch != nil {
     catch(err.(error))
     } else {
     t.defaultCatch(err.(error))
     }
     }
     block()
     return t
    }
     
    type MyError struct {
     error
    }
     
    func main() {
     TryCatch{}.Try(func() {
     println("do something buggy")
     panic(MyError{})
     }).Catch(MyError{}, func(err error) {
     println("catch MyError")
     }).CatchAll(func(err error) {
     println("catch error")
     }).Finally(func() {
     println("finally do something")
     })
     println("done")
    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Go语言异常处理案例解析
    • Golang中异常处理机制详解
    • 深入理解golang的异常处理机制
    • go语言异常panic和恢复recover用法实例
    • 小学生也能看懂的Golang异常处理recover panic
    上一篇:Golang开发中常用的代码片段汇总
    下一篇:关于go语言载入json可能遇到的一个坑
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    利用golang实现封装trycatch异常处理实例代码 利用,golang,实现,封装,trycatch,