error.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package core
  2. import (
  3. "github.com/xinliangnote/go-gin-api/pkg/errors"
  4. )
  5. var _ BusinessError = (*businessError)(nil)
  6. type BusinessError interface {
  7. // i 为了避免被其他包实现
  8. i()
  9. // WithError 设置错误信息
  10. WithError(err error) BusinessError
  11. // WithAlert 设置告警通知
  12. WithAlert() BusinessError
  13. // BusinessCode 获取业务码
  14. BusinessCode() int
  15. // HTTPCode 获取 HTTP 状态码
  16. HTTPCode() int
  17. // Message 获取错误描述
  18. Message() string
  19. // StackError 获取带堆栈的错误信息
  20. StackError() error
  21. // IsAlert 是否开启告警通知
  22. IsAlert() bool
  23. }
  24. type businessError struct {
  25. httpCode int // HTTP 状态码
  26. businessCode int // 业务码
  27. message string // 错误描述
  28. stackError error // 含有堆栈信息的错误
  29. isAlert bool // 是否告警通知
  30. }
  31. func Error(httpCode, businessCode int, message string) BusinessError {
  32. return &businessError{
  33. httpCode: httpCode,
  34. businessCode: businessCode,
  35. message: message,
  36. isAlert: false,
  37. }
  38. }
  39. func (e *businessError) i() {}
  40. func (e *businessError) WithError(err error) BusinessError {
  41. e.stackError = errors.WithStack(err)
  42. return e
  43. }
  44. func (e *businessError) WithAlert() BusinessError {
  45. e.isAlert = true
  46. return e
  47. }
  48. func (e *businessError) HTTPCode() int {
  49. return e.httpCode
  50. }
  51. func (e *businessError) BusinessCode() int {
  52. return e.businessCode
  53. }
  54. func (e *businessError) Message() string {
  55. return e.message
  56. }
  57. func (e *businessError) StackError() error {
  58. return e.stackError
  59. }
  60. func (e *businessError) IsAlert() bool {
  61. return e.isAlert
  62. }