| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- package myerrors
- import (
- "github.com/gogf/gf/errors/gerror"
- "github.com/gogf/gf/frame/g"
- )
- const (
- SysErr = "系统异常,请重新尝试"
- ConvErr = "数据转换异常,请重新尝试"
- DbErr = "数据库操作异常,请重新尝试"
- AuthErr = "认证异常,请重新尝试"
- )
- type apiCode interface {
- Error() string
- Code() int
- TopError() error
- }
- // 自定义异常,方便输出标准异常提示,同时在日志中能记录原始异常信息
- type Error struct {
- topError error // 原始异常
- error error
- }
- func (err *Error) Error() string {
- if err == nil {
- return ""
- }
- if err.error != nil {
- return err.error.Error()
- }
- return ""
- }
- // 返回原始异常信息
- func (err *Error) TopError() error {
- if err == nil {
- return nil
- }
- if err.topError != nil {
- return err.topError
- } else {
- return err.error
- }
- }
- func (err *Error) Code() int {
- if err == nil {
- return -1
- }
- return gerror.Code(err.error)
- }
- func New(text string, topErr error) error {
- return &Error{
- topError: topErr,
- error: gerror.New(text),
- }
- }
- func NewCode(code int, text string, topErr error) error {
- return &Error{
- topError: topErr,
- error: gerror.NewCode(code, text),
- }
- }
- func Code(err error) int {
- if err != nil {
- if e, ok := err.(apiCode); ok {
- return e.Code()
- }
- }
- return -1
- }
- // 输出原始异常
- func TopErr(err error) error {
- if err != nil {
- if e, ok := err.(apiCode); ok {
- return e.TopError()
- }
- }
- return nil
- }
- // 异常检查 返回值:是否异常、error实例、异常码、异常信息
- func CheckError(err error, msg ...string) (bool, error, int32, string) {
- message := ""
- if err != nil {
- theErr := err
- if len(msg) > 0 {
- message = msg[0]
- }
- if _, ok := err.(*gerror.Error); ok && gerror.Code(err) == -1 && message == "" {
- message = SysErr
- }
- if Code(err) == 210 { // 提示性异常,不返回Error
- return false, nil, 210, err.Error()
- } else if Code(err) == 900 { // 系统级异常
- if TopErr(err) != nil {
- theErr = TopErr(err)
- }
- g.Log().Error(theErr) // 记录原始异常
- if message != "" {
- return true, gerror.New(message), 900, message
- }
- return true, err, 900, err.Error()
- } else { // 常规异常
- if TopErr(err) != nil {
- theErr = TopErr(err)
- }
- g.Log().Error(theErr) // 记录原始异常
- if message != "" {
- return true, gerror.New(message), 500, message
- }
- return true, err, 500, err.Error()
- }
- }
- return false, nil, 200, "操作成功"
- }
- // 提示性异常,不进行通常错误处理(不输出日志)
- func NewMsgError(topErr error, msg string) error {
- return NewCode(210, msg, topErr)
- }
- // 系统级别异常
- func NewSysError(topErr error, msg ...string) error {
- message := SysErr
- if len(msg) > 0 {
- message = msg[0]
- }
- return NewCode(900, message, topErr)
- }
- // 数据库操作异常
- func NewDbError(topErr error, msg ...string) error {
- message := DbErr
- if len(msg) > 0 {
- message = msg[0]
- }
- return NewCode(500, message, topErr)
- }
- // 类型转换异常
- func NewConvError(topErr error, msg ...string) error {
- message := ConvErr
- if len(msg) > 0 {
- message = msg[0]
- }
- return NewCode(500, message, topErr)
- }
- // 认证异常
- func NewAuthError(topErr error, msg ...string) error {
- message := AuthErr
- if len(msg) > 0 {
- message = msg[0]
- }
- return NewCode(401, message, topErr)
- }
|