国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

利用golang實現封裝trycatch異常處理實例代碼

2020-04-01 19:04:51
字體:
來源:轉載
供稿:網友

前言

社區不少人在談論 golang/70687.html">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")}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江口县| 佛坪县| 霍邱县| 蒙阴县| 望谟县| 印江| 古丈县| 信阳市| 肥乡县| SHOW| 灵丘县| 怀集县| 南漳县| 页游| 耒阳市| 濮阳县| 淮安市| 宁阳县| 康保县| 三亚市| 衡山县| 武胜县| 涞水县| 饶阳县| 景谷| 故城县| 古交市| 武川县| 浪卡子县| 东乌珠穆沁旗| 信阳市| 金昌市| 天峻县| 尼木县| 扶绥县| 仙居县| 广州市| 南漳县| 仙居县| 固阳县| 射阳县|