Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
package requestid
import (
"strings"
"github.com/gin-gonic/gin"
)
func New(opts ...Option) gin.HandlerFunc {
var cfg config = config{
generator: DefaultFenerator,
}
for _, opt := range opts {
opt(&cfg)
}
return func(c *gin.Context) {
rid := strings.TrimSpace(c.GetHeader(HeaderKey))
clientProvided := rid != "" && len(rid) <= 128
if !clientProvided {
rid = cfg.generator()
}
c.Request.Header.Set(HeaderKey, rid)
c.Header(HeaderKey, rid)
c.Set(ContextKey, rid)
c.Set(ClientProvidedContextKey, clientProvided)
}
}
// FromClient 仅返回客户端显式提供且长度合规的请求ID。
func FromClient(c *gin.Context) (string, bool) {
if c == nil {
return "", false
}
provided, ok := c.Get(ClientProvidedContextKey)
if !ok || provided != true {
return "", false
}
return c.GetHeader(HeaderKey), true
}