code.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package fserr
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. // ErrCode 产生error所包含的错误码信息
  7. // 支持http错误码、业务错误码
  8. // 可通过下方快捷函数快速创建指定http码的错误码
  9. type ErrCode struct {
  10. // HttpCode 该错误码建议的HTTP响应码
  11. HttpCode int `json:"httpCode,omitempty"`
  12. // BusinessCode 该错误码对应的业务码
  13. // +optional
  14. BusinessCode string `json:"businessCode,omitempty"`
  15. // Message 该错误码对应的错误信息
  16. // +optional
  17. Message string `json:"message,omitempty"`
  18. }
  19. // SetDefault 设置默认错误码
  20. // 当错误码匹配失败时,提供的备选方案,已内置默认错误码,
  21. // 它的HTTP码为200,业务码和信息均为零值
  22. func SetDefault(httpCode, businessCode int, message string) {
  23. defaultErrCode = ErrCode{httpCode, fmt.Sprintf("%06d", businessCode), message}
  24. }
  25. // NewCode 创建指定信息的错误码
  26. func NewCode(httpCode, businessCode int, message string) ErrCode {
  27. code := ErrCode{httpCode, fmt.Sprintf("%06d", businessCode), message}
  28. register(businessCode, code)
  29. return code
  30. }
  31. // === 以下均为见名知意的业务码构建方式 ===
  32. func NewOK(businessCode int, message string) ErrCode {
  33. return NewCode(http.StatusOK, businessCode, message)
  34. }
  35. func NewNotFound(businessCode int, message string) ErrCode {
  36. return NewCode(http.StatusNotFound, businessCode, message)
  37. }
  38. func NewAlreadyExists(businessCode int, message string) ErrCode {
  39. return NewCode(http.StatusConflict, businessCode, message)
  40. }
  41. func NewGenerateNameConflict(businessCode int, message string) ErrCode {
  42. return NewCode(http.StatusConflict, businessCode, message)
  43. }
  44. func NewUnauthorized(businessCode int, message string) ErrCode {
  45. return NewCode(http.StatusUnauthorized, businessCode, message)
  46. }
  47. func NewForbidden(businessCode int, message string) ErrCode {
  48. return NewCode(http.StatusForbidden, businessCode, message)
  49. }
  50. func NewConflict(businessCode int, message string) ErrCode {
  51. return NewCode(http.StatusConflict, businessCode, message)
  52. }
  53. func NewGone(businessCode int, message string) ErrCode {
  54. return NewCode(http.StatusGone, businessCode, message)
  55. }
  56. func NewBadRequest(businessCode int, message string) ErrCode {
  57. return NewCode(http.StatusBadRequest, businessCode, message)
  58. }
  59. func NewTooManyRequests(businessCode int, message string) ErrCode {
  60. return NewCode(http.StatusTooManyRequests, businessCode, message)
  61. }
  62. func NewServiceUnavailable(businessCode int, message string) ErrCode {
  63. return NewCode(http.StatusServiceUnavailable, businessCode, message)
  64. }
  65. func NewMethodNotSupported(businessCode int, message string) ErrCode {
  66. return NewCode(http.StatusMethodNotAllowed, businessCode, message)
  67. }
  68. func NewInternalError(businessCode int, message string) ErrCode {
  69. return NewCode(http.StatusInternalServerError, businessCode, message)
  70. }
  71. func NewTimeoutError(businessCode int, message string) ErrCode {
  72. return NewCode(http.StatusGatewayTimeout, businessCode, message)
  73. }
  74. func NewTooManyRequestsError(businessCode int, message string) ErrCode {
  75. return NewCode(http.StatusTooManyRequests, businessCode, message)
  76. }
  77. func NewRequestEntityTooLargeError(businessCode int, message string) ErrCode {
  78. return NewCode(http.StatusRequestEntityTooLarge, businessCode, message)
  79. }