package middleware import ( "crypto/rand" "encoding/hex" "github.com/gin-gonic/gin" ) const TraceIDKey = "traceId" func Trace() gin.HandlerFunc { return func(c *gin.Context) { b := make([]byte, 8) _, _ = rand.Read(b) traceID := hex.EncodeToString(b) c.Set(TraceIDKey, traceID) c.Writer.Header().Set("X-Trace-Id", traceID) c.Next() } } func GetTraceID(c *gin.Context) string { if v, ok := c.Get(TraceIDKey); ok { if s, ok := v.(string); ok { return s } } return "" }