response.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package controllers
  2. import (
  3. "time"
  4. "github.com/gofiber/fiber/v2"
  5. "github.com/google/uuid"
  6. )
  7. const traceIdHeader string = "X-Trace-Id"
  8. type Response[T any] struct {
  9. Code int `json:"code"`
  10. Message string `json:"message"`
  11. Data T `json:"data"`
  12. TraceID string `json:"traceId"`
  13. Timestamp int64 `json:"timestamp"`
  14. }
  15. type ResponseNoData struct {
  16. Code int `json:"code"`
  17. Message string `json:"message"`
  18. TraceID string `json:"traceId"`
  19. Timestamp int64 `json:"timestamp"`
  20. }
  21. func JSONResponse[T any](c *fiber.Ctx, code int, message string, data T) error {
  22. traceId := c.Get(traceIdHeader) // 从请求头取
  23. if traceId == "" {
  24. traceId = uuid.New().String() // 没有就生成
  25. }
  26. // 设置到响应头,让前端也能拿到
  27. c.Set(traceIdHeader, traceId)
  28. resp := Response[T]{
  29. Code: code,
  30. Message: message,
  31. Data: data,
  32. TraceID: traceId,
  33. Timestamp: time.Now().UnixMilli(),
  34. }
  35. return c.JSON(resp)
  36. }
  37. func JSONResponseNoData(c *fiber.Ctx, code int, message string) error {
  38. traceId := c.Get(traceIdHeader) // 从请求头取
  39. if traceId == "" {
  40. traceId = uuid.New().String() // 没有就生成
  41. }
  42. // 设置到响应头,让前端也能拿到
  43. c.Set(traceIdHeader, traceId)
  44. resp := ResponseNoData{
  45. Code: code,
  46. Message: message,
  47. TraceID: traceId,
  48. Timestamp: time.Now().UnixMilli(),
  49. }
  50. return c.JSON(resp)
  51. }