code.go 3.5 KB

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