| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package ctx
-
- import (
- "context"
- "net/http"
- )
-
- // UserContext 用户上下文
- type RequestContext struct {
- TraceID string `json:"trace_id"`
- ServiceName string `json:"service_name"`
- InstanceName string `json:"instance_name"`
- TenantID string `json:"tenant_id"`
- UserID string `json:"user_id"`
- }
-
- // 内部key,不会和其他包冲突
- type ctxKey struct{}
-
- var loggerKey = ctxKey{}
-
- // Save RequestContext
- func SaveContext(r *http.Request, requestContext *RequestContext) *http.Request {
- ctx := context.WithValue(r.Context(), loggerKey, requestContext)
- return r.WithContext(ctx)
- }
-
- // GetContext 从请求获取RequestContext
- func GetContext(r *http.Request) *RequestContext {
- if r == nil {
- return &RequestContext{}
- }
-
- if v := r.Context().Value(loggerKey); v != nil {
- // 修正:类型断言为 *RequestContext
- if loggerCtx, ok := v.(*RequestContext); ok {
- return loggerCtx
- }
- }
-
- return &RequestContext{}
- }
|