code.go 3.2 KB

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