// Package try ... // // Description : try ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2023-07-20 12:13 package try // DefaultCatchHandler catch handler默认实现 // // Author : go_developer@163.com<白茶清欢> // // Date : 12:14 2023/7/20 type DefaultCatchHandler struct { hasDeal bool // 异常是否已被处理 errCode string data map[string]any } // hasDealError 判断异常是否已经被处理 // // Author : go_developer@163.com<白茶清欢> // // Date : 12:46 2023/7/20 func (d *DefaultCatchHandler) hasDealError() bool { if d.hasDeal { return true } if d.errCode == "" { return true } return false } // Catch 处理指定errorCode // // Author : go_developer@163.com<白茶清欢> // // Date : 17:19 2023/7/20 func (d *DefaultCatchHandler) Catch(errCode string, handler func(errCode string, data map[string]any)) ICatchHandler { if d.hasDealError() { return d } if errCode != d.errCode { return d } d.hasDeal = true defer func() { if r := recover(); nil != r { d.hasDeal = false d.data[errCode+"_handler_error"] = r.(error).Error() } }() handler(d.errCode, d.data) return d } // CatchAll 捕捉任意一场 // // Author : go_developer@163.com<白茶清欢> // // Date : 17:47 2023/7/20 func (d *DefaultCatchHandler) CatchAll(handler func(errCode string, data map[string]any)) IFinalHandler { if d.hasDealError() { return d } defer func() { if r := recover(); nil != r { d.data[d.errCode+"_handler_error"] = r.(error).Error() } }() d.hasDeal = true handler(d.errCode, d.data) return d } // Finally 最终逻辑 // // Author : go_developer@163.com<白茶清欢> // // Date : 17:48 2023/7/20 func (d *DefaultCatchHandler) Finally(data map[string]any, handlers ...func(data map[string]any)) { if data == nil { data = map[string]any{} } defer func() { if r := recover(); nil != r { } }() for _, itemHandler := range handlers { itemHandler(data) } }