2026-05-12 20:07:49 +08:00

44 lines
778 B
Go

package middleware
import (
"crypto/rand"
"encoding/hex"
"time"
"github.com/gin-gonic/gin"
)
const (
HeaderRequestID = "X-Request-ID"
ContextRequestID = "requestID"
)
func RequestID() gin.HandlerFunc {
return func(c *gin.Context) {
requestID := newRequestID()
c.Set(ContextRequestID, requestID)
c.Header(HeaderRequestID, requestID)
c.Next()
}
}
func CurrentRequestID(c *gin.Context) string {
value, ok := c.Get(ContextRequestID)
if !ok {
return ""
}
requestID, ok := value.(string)
if !ok {
return ""
}
return requestID
}
func newRequestID() string {
var raw [16]byte
if _, err := rand.Read(raw[:]); err == nil {
return hex.EncodeToString(raw[:])
}
return hex.EncodeToString([]byte(time.Now().UTC().Format("20060102150405.000000000")))
}