v3:

【错误码添加活动参数】调用处: c.JSON(http.StatusOK, commonResponse.Error(commonErrors.ErrUserIDNotFound(), userID))acm: 10006 : "无效的用户%d"common: func Error(err error, obj ...interface{}) Response {if eErr, ok := err.(errors.Error); ok {if msg, ok := errors.ErrorMap[int(eErr.Code)]; ok {return Response{Code: eErr.Code,Msg:  fmt.Sprintf(msg, obj...),}}}return Response{Code: errors.Unknown,Msg:  errors.ErrorMap[int(errors.Unknown)],}
}
func Err(err error, obj ...interface{}) Response {if eErr, ok := err.(errors.Error); ok {if msg, ok := errors.ErrorMap[int(eErr.Code)]; ok {return Response{Code: eErr.Code,Msg:  fmt.Sprintf(msg, obj...),}}}return Response{Code: errors.Unknown,Msg:  errors.ErrorMap[int(errors.Unknown)],}
}func Error(err error, obj ...interface{}) Response {if eErr, ok := err.(errors.Error); ok {if msg, ok := errors.ErrorMap[int(eErr.Code)]; ok {return Response{Code: eErr.Code,Msg:  fmt.Sprintf(msg, obj...),}}}return Response{Code: errors.Unknown,Msg:  errors.ErrorMap[int(errors.Unknown)],}
}//admin
func ErrorAdmin(err error, obj ...interface{}) Response {if eErr, ok := err.(errors.Error); ok {if msg, ok := errors.ErrorMap[int(eErr.Code)]; ok {return Response{Code: eErr.Code,Msg:  fmt.Sprintf(msg, obj...),}}return Response{Code: errors.Unknown,Msg:  errors.ErrorMap[int(errors.Unknown)],}}return Response{Code: errors.Unknown,Msg:  err.Error(), //返回真实的错误}
}

v2:

/*注:
(1)传给Error的方法的Msg可以去掉,例如下面ErrNotFound方法里的Msg字段:
func ErrNotFound() Error {return Error{Code: NotFound,Msg:  "The resource you were trying to find could not be found.",}
}
直接传:
func ErrNotFound() Error {return Error{Code: NotFound,}
}(2)之前需要定义:
type Error struct {Code model.ErrorType `json:"code"`Msg  string          `json:"msg"`
}
func (e Error) Error() string {bytes, _ := json.Marshal(e)return string(bytes)
}(3)使用:
若只在api层使用:commonResponse.Error(commonErrors.ErrUserIDNotFound())
若service或store层使用:
store:
func (s *championTplMysqlStore) CreateChampionTpl(c *model.ChampionTpl) error {tx := s.db.Begin()db := tx.Model(&model.ChampionTpl{})if db.Where("user_id = ? AND game_id = ? ", c.UserId, c.GameId).Scan(&model.ChampionTpl{}).RowsAffected > 99 {tx.Rollback()return commonErrors.ErrCreateRecordTooMany()}if err := db.Create(c).Error; err != nil {tx.Rollback()logrus.Errorf("创建阵容模板失败 error: %v", err)return err}if err := tx.Commit().Error; err != nil {logrus.Errorf("创建阵容模板失败 error: %v", err)return err}return nil
}
service:
func CreateChampionTpl(gameTpl *model.ChampionTpl) error {return store.ChampionTplMysql.CreateChampionTpl(gameTpl)
}
controller:(此时类型断言起作用:针对service层返回的不同error类型:是Error类型还是error类型)err = service.CreateChampionTpl(championTpl)if err != nil {c.JSON(http.StatusOK, commonResponse.Err(err))return}
*/
func Error(err error) Response {if eErr, ok := err.(errors.Error); ok {if msg, ok := errors.ErrorMap[int(eErr.Code)]; ok {return Response{Code: eErr.Code,Msg:  msg,}}}return Response{Code: errors.Unknown,Msg:  errors.ErrorMap[int(errors.Unknown)],}
}

之前版本:

acm:10001 : "未知错误"
10002 : "Access forbidden."
10003 : "数字不满足 range 范围"
10004 : "The resource you were trying to find could not be found."
10005 : "Request parameter error."
10006 : "无效的用户"
10007 : "含有敏感词,请检查后修改再保存"
10008 : "同一板块最多三篇文章置顶"
10009 : "该版块内容无法推荐到首页"
10010 : "已过期"
10011 : "大佬你的账号似乎有点多哦"
10012 : "你已经注册太多小号啦"
10013 : "该 IP 近期已注册过多账号,暂时无法注册"
10014 : "你已经创建了太多阵容啦"kit:commonError "gitlab.haibaodianjing.com/community/common/errors"// error
errorContent, err := Client.Get(commonConst.AliYunACMError, viper.GetString(consts.EnvKeyAliYunACMGroup))
if err != nil {logrus.Fatalf("init error failed: %v", err)
}
Client.AddWatcher(commonConst.AliYunACMError, viper.GetString(consts.EnvKeyAliYunACMGroup), LoadError)
LoadError(errorContent)func LoadError(content []byte) {errorMap := make(map[int]string, 0)if err := yaml.Unmarshal(content, errorMap); err != nil {logrus.Errorf("load error failed: %v", err)return}logrus.Infof("error loaded: %v", errorMap)commonError.ErrorMap = errorMap
}c.JSON(http.StatusOK, commonResponse.Error(commonErrors.UserIDNotFound))comoon:const (Unknown               model.ErrorType = 10001 // 未知错误/内部服务错误Forbidden             model.ErrorType = 10002 // 无权限InvalidCount          model.ErrorType = 10003 // 数字不满足 range 范围NotFound              model.ErrorType = 10004 // 资源未找到RequestParameterError model.ErrorType = 10005 // 请求参数错误UserIDNotFound        model.ErrorType = 10006 // 用户 ID 未找到TextDetectionUnPass   model.ErrorType = 10007 // 文本检测未通过TopArticleTooMany     model.ErrorType = 10008 // 置顶文章最多三篇ArticleRecommend      model.ErrorType = 10009 // 该版块内容无法推荐到首页Expired               model.ErrorType = 10010 // 该版块内容无法推荐到首页LoginDeviceLimit      model.ErrorType = 10011RegisterDeviceLimit   model.ErrorType = 10012RegisterIPLimit       model.ErrorType = 10013CreateRecordTooMany   model.ErrorType = 10014 // 创建记录太多
)var ErrorMap map[int]stringfunc Error(code model.ErrorType) Response {if msg, ok := errors.ErrorMap[int(code)]; ok {return Response{Code: code,Msg:  msg,}}return Response{Code: errors.Unknown,Msg:  "未知错误",}
}

可实时配置的错误系统 errcode-errmsg相关推荐

  1. 微信测试公众号接口配置修改报-配置失败 错误信息- {errcode:-106,errmsg:token check fail}

    修改微信测试公众号的接口配置信息的时候:一直提示配置失败, 使用谷歌浏览器开发者工具看一下response返回的是啥 {"errcode":-106,"errmsg&qu ...

  2. 统一客服消息返回错误:{errcode:43004,errmsg:require subscribe hint: [9Vv08633952]}

    2019独角兽企业重金招聘Python工程师标准>>> 公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg" ...

  3. 《Spark实时词频统计处理系统》

    ------此项目整理自<Spark Streaming 实时流式大数据处理实战>肖力涛                                             第8章 实 ...

  4. MySQL的配置方法以及数据库配置常见错误及其解决方法

    第一部分.MySQL的配置方法: 以下为笔者整理的mysql 5.5 安装配置教程笔记.通过逐一界面分析,解决大家在配置MySQL数据库时可能存在的疑惑. 首先给出MySQL下载地址:MySQL :: ...

  5. vim的高级用法配置以及在系统中如何获取帮助

    vim的高级用法配置以及在系统中如何获取帮助 1 vim的三种模式 1.1 使用方法 1.2 vim模式 2 vim工作的基本配置 2.1 临时设定(set设定) 2.2 永久设定方式 3 搜索 4 ...

  6. 1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上...

    一.数据仓库架构 二.flume收集数据存储到hdfs 文档:http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hd ...

  7. syslog(LOG_ERR, Error: errcode=%d, message=%s, errcode, errmsg);

    # file #include <sys/syslog.h> int main(void) {int errcode = 2;char errmsg[] = "some erro ...

  8. 基于MTCNN和FaceNet的实时人脸检测识别系统

    文章目录 模型介绍 MTCNN FaceNet 基于MTCNN和FaceNet的实时人脸检测识别系统 在LFW数据集上测试 参考文献 GitHub项目地址:https://github.com/Har ...

  9. Unity编辑器拓展之二十四:基于Unity Node Editor、ScriptableObject的配置化新手引导系统

    博客迁移 个人博客站点,欢迎访问,www.jiingfengji.tech 本文主要介绍根据一款Node Editor库开发的新手引导系统 git地址如下: https://github.com/lu ...

  10. 开源实时消息推送系统 MPush

    系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

最新文章

  1. input属性为number,maxlength不起作用的解决方案
  2. JS学习笔记(一)DOM事件和监听
  3. 网络编程学习笔记(套接口超时)
  4. Eclipse reports rendering library more recent than
  5. P3332-[ZJOI2013]K大数查询【树套树】
  6. 95-30-050-java.util-LinkedHashMap
  7. WMS仓储管理系统有那些功能?
  8. ubuntu8.04 之aptitude
  9. 华为升级鸿蒙系统教程,华为升级鸿蒙系统方法汇总 华为手机各型号升级鸿蒙系统教程...
  10. [NOI2010] 航空管制
  11. 蘑菇战争 2 for Mac游戏介绍
  12. 这两他安搬家,今天终于搬完了!
  13. input类型为file时,accept为表格xlsl
  14. 解决No thread-bound request found: Are you referring to request attributes outside of an actual web.异常
  15. python爬虫 爬取清纯小姐姐图片
  16. 【基础】信息时代与计算机
  17. Vue中的@blur/@focus事件
  18. 财路网每日原创推送:轻信微信上的投资专家,男子亏损四十多万!
  19. 系统备用服务器连接配置异常,网络配置的DNS服务老是异常网络连接老是异常...._网络编辑_帮考网...
  20. push_back 和 emplace_back 剖析

热门文章

  1. 初中计算机室教学计划,初中信息技术教学计划
  2. ABAP 客户主数据批量导入
  3. 一小时教会你用JAVA制作超级玛丽小游戏
  4. Linux临时目录/tmp与/var/tmp
  5. python查询12306余票_【python】用GUI编写一个12306余票查询的系统,附源码
  6. web网页调用本地cs客户端程序exe
  7. matlab解韩信点兵问题,小学数学题目巧解—韩信点兵问题
  8. 40个超有趣的Linux命令行彩蛋和游戏
  9. 【windows——工具篇】哔哩哔哩快捷键
  10. Unity接入穿山甲广告SDK教程