package middleware import ( "crypto/rand" "encoding/hex" "github.com/gin-gonic/gin" ) // RequestID attaches X-Request-ID to every request/response for tracing. func RequestID() gin.HandlerFunc { return func(c *gin.Context) { id := c.GetHeader("X-Request-ID") if id == "" { id = newID() } c.Set("request_id", id) c.Header("X-Request-ID", id) c.Next() } } func newID() string { var b [16]byte if _, err := rand.Read(b[:]); err != nil { return "req-unknown" } return hex.EncodeToString(b[:]) }