code.go 3.3 KB

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