登录
首页 >  Golang >  Go问答

opentelemetry源码 otel.Tracer(name)这块有点看不懂?

来源:SegmentFault

时间:2023-05-05 17:39:10 399浏览 收藏

本篇文章给大家分享《opentelemetry源码 otel.Tracer(name)这块有点看不懂?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

otel.Tracer(name).Start(context.Background(), "Handle")
 
type TracerOption interface {
    apply(TracerConfig) TracerConfig
}
func Tracer(name string, opts ...trace.TracerOption) trace.Tracer {
    return GetTracerProvider().Tracer(name, opts...)
}
 
func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer {
    p.mtx.Lock()
    defer p.mtx.Unlock()
 
    if p.delegate != nil {
        return p.delegate.Tracer(name, opts...)
    }
 
    // At this moment it is guaranteed that no sdk is installed, save the tracer in the tracers map.
 
    c := trace.NewTracerConfig(opts...)
    key := il{
        name:    name,
        version: c.InstrumentationVersion(),
    }
 
    if p.tracers == nil {
        p.tracers = make(map[il]*tracer)
    }
 
    if val, ok := p.tracers[key]; ok {
        return val
    }
 
    t := &tracer{name: name, opts: opts, provider: p}
    p.tracers[key] = t
    return t
}

c := trace.NewTracerConfig(opts...)

 
func NewTracerConfig(options ...TracerOption) TracerConfig {
    var config TracerConfig
    for _, option := range options {
        config = option.apply(config)
    }
    return config
}
 

option.apply(config) 这行,这个option是哪个,我没找到啊!
请教各位

正确答案

又研究了一下源码,发现NewTracerConfig 传的 options 默认其实就是没有值的

func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer {
    c := trace.NewTracerConfig(opts...)
        ........

otel.Tracer(name)调用的时候压根就没传第二个参数,之所以有这行代码,trace.NewTracerConfig(opts...)
是为了原有参数满足不了的情况下,可以自己进行设置,然后写到第二个参数那里对原参数进行覆盖

好了,本文到此结束,带大家了解了《opentelemetry源码 otel.Tracer(name)这块有点看不懂?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>