code.go 3.6 KB

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