init: hgmj server initial commit

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 16:50:13 +08:00
co-authored by Claude Opus 4.7
commit 625e89c15d
1870 changed files with 254090 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
}