golang实现封装try/catch异常处理
来源:互联网 发布:unity3d 人物模型 编辑:程序博客网 时间:2024/04/28 20:21
作者:峰云就她了
链接:http://xiaorui.cc/
來源:个人博客
共 1794 字,阅读需 4 分钟
社区不少人在谈论 golang 为毛不用try/catch
模式,而采用苛刻的recovery、panic、defer
组合…. 从老外那整了一个trycatch包,感觉不错,拿出来分享下…
package mainimport ("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 = blockreturn t}func (t TryCatch) Catch(e error, block func(err error)) TryCatch {errorType := reflect.TypeOf(e)t.catches[errorType] = blockreturn t}func (t TryCatch) Finally(block func()) TryCatch {err := <-t.errChanif 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")}
阅读全文
0 0
- golang实现封装try/catch异常处理
- 在golang里实现类似try catch 的异常处理机制
- try catch 异常处理
- try-catch异常处理
- try catch 异常处理
- 异常处理(try catch)
- 异常处理@try catch
- 异常处理try.....catch
- try catch异常处理
- try catch异常处理
- 异常处理try catch
- try catch处理异常处理
- 异常处理 try-catch 用法
- JAVA异常处理try...catch
- try catch异常处理例子
- try catch throw异常处理
- c++异常处理 try catch
- iOS 异常处理@try,catch
- HTTP状态码详情(转载)
- 并发库之信号量
- 一道编程题
- Android EditText限制输入两位小数
- 6-2 多态性与虚函数
- golang实现封装try/catch异常处理
- Java之——利用Comparator接口对多个排序条件进行处理
- 1011. A+B和C (15)
- 某度的面试
- js--打卡--12.08 文档加载和onload事件
- OpenSSL心脏滴血漏洞
- Recyclerview横向的滑动与点击事件
- BZOJ1126: [POI2008]Uci
- 安卓对话框(Dialog)使用方法汇总