亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-01 15:30:51 來源:腳本之家 閱讀:206 作者:xiaorui 欄目:編程語言

前言

社區不少人在談論 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")
}

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长武县| 庆阳市| 宣威市| 平江县| 勐海县| 巴青县| 祥云县| 合作市| 射洪县| 海南省| 西华县| 睢宁县| 读书| 绿春县| 利辛县| 大庆市| 马关县| 朝阳县| 曲松县| 花垣县| 崇礼县| 衡东县| 潼关县| 汤原县| 隆安县| 南投县| 库伦旗| 连江县| 钟祥市| 虞城县| 江北区| 潞西市| 仙桃市| 徐汇区| 肇源县| 永靖县| 涟源市| 大同市| 台南市| 东阿县| 保亭|