增加try-cache
This commit is contained in:
130
try/iTry.go
Normal file
130
try/iTry.go
Normal file
@ -0,0 +1,130 @@
|
||||
// Package try...
|
||||
//
|
||||
// Description : 各种接口定义
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-07-24 9:47 下午
|
||||
package try
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-developer/gopkg/easymap"
|
||||
"github.com/pkg/errors"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
// ICatchHandler catch处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:12 下午 2021/7/24
|
||||
type ICatchHandler interface {
|
||||
Catch(e error, handler func(err error)) ICatchHandler
|
||||
CatchAll(handler func(err error)) FinalHandler
|
||||
FinalHandler
|
||||
}
|
||||
|
||||
// SystemError 系统异常
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:35 下午 2021/7/24
|
||||
type SystemError struct {
|
||||
error
|
||||
}
|
||||
|
||||
// FinalHandler final处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:12 下午 2021/7/24
|
||||
type FinalHandler interface {
|
||||
Finally(handlers ...func())
|
||||
}
|
||||
|
||||
// WithNormal 入口try函数, 普通的逻辑
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:43 下午 2021/7/24
|
||||
func WithNormal(f func()) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
switch r.(type) {
|
||||
case runtime.Error:
|
||||
t.err = r.(error)
|
||||
case error:
|
||||
t.err = r.(error)
|
||||
case string, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64:
|
||||
t.err = SystemError{SystemError{error: errors.New(fmt.Sprintf("%v", r))}}
|
||||
default:
|
||||
byteData, _ := json.Marshal(r)
|
||||
t.err = SystemError{error: errors.New(string(byteData))}
|
||||
}
|
||||
}
|
||||
}()
|
||||
f()
|
||||
}()
|
||||
return t
|
||||
}
|
||||
|
||||
// WithGin 带 gin context 的 try, 可集成gin框架
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:50 下午 2021/7/24
|
||||
func WithGin(ctx *gin.Context, f func(ctx *gin.Context)) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
t.err = r.(error)
|
||||
}()
|
||||
f(ctx)
|
||||
}()
|
||||
return t
|
||||
}
|
||||
|
||||
// WithData 带数据的try
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:52 下午 2021/7/24
|
||||
func WithData(data easymap.EasyMap, f func(data easymap.EasyMap)) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
t.err = r.(error)
|
||||
}
|
||||
}()
|
||||
f(data)
|
||||
}()
|
||||
return t
|
||||
}
|
||||
|
||||
// WithInterface 传入任意数据类型
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:53 下午 2021/7/24
|
||||
func WithInterface(data interface{}, f func(data interface{})) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
t.err = r.(error)
|
||||
}
|
||||
}()
|
||||
f(data)
|
||||
}()
|
||||
return t
|
||||
}
|
Reference in New Issue
Block a user