虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > GO语言 > 利用golang实现封装trycatch异常处理实例代码

利用golang实现封装trycatch异常处理实例代码
类别:GO语言   作者:码皇   来源:互联网   点击:

Go语言追求简洁优雅,所以go语言不支持传统的 try…catch…finally 这种异常,最近发现了不错的trycatch包,下面这篇文章主要跟大家分享了关于利用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")}

总结

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

相关热词搜索: golang try catch golang 异常处理 go语言