errcode.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package rescode
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. // 只允许使用下面的几个http状态码
  7. const (
  8. HttpCode200 = http.StatusOK
  9. HttpCode400 = http.StatusBadRequest
  10. HttpCode401 = http.StatusUnauthorized
  11. HttpCode403 = http.StatusForbidden
  12. HttpCode404 = http.StatusNotFound
  13. HttpCode500 = http.StatusInternalServerError
  14. )
  15. const (
  16. successCode = 000000
  17. unknownCode = 999999
  18. )
  19. var (
  20. successErrCode = ErrCode{
  21. httpCode: HttpCode200,
  22. code: successCode,
  23. message: "成功",
  24. reference: "",
  25. }
  26. unknownErrCode = ErrCode{
  27. httpCode: HttpCode500,
  28. code: unknownCode,
  29. message: "未知错误",
  30. reference: "未知错误,请联系系统开发者",
  31. }
  32. )
  33. type ErrCode struct {
  34. httpCode int
  35. code int
  36. cause error
  37. message string
  38. reference string
  39. tips string
  40. }
  41. func NewErrCode(httpCode, code int, message, reference string) *ErrCode {
  42. return &ErrCode{
  43. httpCode: httpCode,
  44. code: code,
  45. message: message,
  46. reference: reference,
  47. }
  48. }
  49. func (ec *ErrCode) HTTPStatus() int {
  50. return ec.httpCode
  51. }
  52. func (ec *ErrCode) Code() string {
  53. return fmt.Sprintf("%06d", ec.code)
  54. }
  55. func (ec *ErrCode) Reference() string {
  56. return ec.reference
  57. }
  58. func (ec *ErrCode) Message() string {
  59. return ec.message
  60. }
  61. func (ec *ErrCode) Cause() error {
  62. return ec.cause
  63. }
  64. func (ec *ErrCode) Error() string {
  65. var cause string
  66. if ec.cause != nil {
  67. cause = ec.cause.Error()
  68. }
  69. return fmt.Sprintf("response:%s tips:%s cause:%s", ec.message, ec.tips, cause)
  70. }
  71. func RegisterErrorWithCause(cause error, errCode *ErrCode) error {
  72. return &ErrCode{
  73. httpCode: errCode.httpCode,
  74. code: errCode.code,
  75. cause: cause,
  76. tips: "",
  77. message: errCode.message,
  78. reference: errCode.reference,
  79. }
  80. }
  81. func RegisterErrorWithMessage(cause error, tips string, errCode *ErrCode) error {
  82. return &ErrCode{
  83. httpCode: errCode.httpCode,
  84. code: errCode.code,
  85. cause: cause,
  86. message: errCode.message,
  87. tips: tips,
  88. reference: errCode.reference,
  89. }
  90. }
  91. func ParseCode(err error) *ErrCode {
  92. if err == nil {
  93. return nil
  94. }
  95. if v, ok := err.(*ErrCode); ok {
  96. return v
  97. }
  98. return &unknownErrCode
  99. }