代码拉取完成,页面将自动刷新
package kk_stage
import (
"context"
"gitee.com/cruvie/kk_go_kit/kk_id"
"github.com/gin-gonic/gin"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/noop"
"sync"
)
type Stage struct {
Ctx context.Context
GinCtx *gin.Context
Keys *sync.Map
Tracer *Tracer
TraceId string
ServiceName string
DebugMode bool
}
func NewStage(ctx context.Context, serviceName string, debugMode bool) (stage *Stage) {
stage = &Stage{
Ctx: ctx,
Keys: new(sync.Map),
Tracer: NewTracer(serviceName, ctx),
TraceId: kk_id.GenerateId().String(),
ServiceName: serviceName,
DebugMode: debugMode,
}
return stage
}
// Copy use this to create a new stage in a new goroutine
func (stage *Stage) Copy() *Stage {
ctx := context.Background()
newStage := &Stage{
Ctx: ctx,
Keys: stage.Keys,
Tracer: NewTracer(stage.ServiceName, ctx),
TraceId: stage.TraceId,
ServiceName: stage.ServiceName,
DebugMode: stage.DebugMode,
}
if stage.GinCtx != nil {
newStage.GinCtx = stage.GinCtx.Copy()
}
return newStage
}
func (stage *Stage) SetGinCtx(c *gin.Context) *Stage {
stage.GinCtx = c
return stage
}
func (stage *Stage) Set(key any, value any) {
stage.Keys.Store(key, value)
}
func (stage *Stage) Get(key any) (value any, exists bool) {
value, ok := stage.Keys.Load(key)
return value, ok
}
func (stage *Stage) StartTrace(spanName string) (span trace.Span) {
if !EnableTracer {
return noop.Span{}
} else {
ctx, span := stage.Tracer.Tracer.Start(
stage.Tracer.Context,
spanName,
trace.WithAttributes(attribute.String(TraceIdKey, stage.TraceId)),
)
stage.Tracer.Context = ctx
return span
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。