package middleware import ( "github.com/gin-gonic/gin" uuid "github.com/satori/go.uuid" ) const ( XRequestIDKey = "X-Request-ID" ) func RequestID() gin.HandlerFunc { return func(c *gin.Context) { // Check for incoming header, use it if exists rid := c.GetHeader(XRequestIDKey) if rid == "" { rid = uuid.Must(uuid.NewV4(), nil).String() c.Request.Header.Set(XRequestIDKey, rid) c.Set(XRequestIDKey, rid) } // Set XRequestIDKey header c.Writer.Header().Set(XRequestIDKey, rid) c.Next() } } // GetRequestIDFromContext returns 'RequestID' from the given context if present. func GetRequestIDFromContext(c *gin.Context) string { if v, ok := c.Get(XRequestIDKey); ok { if requestID, ok := v.(string); ok { return requestID } } return "" }