SkyAPM / go2sky

Distributed tracing and monitor SDK in Go for Apache SkyWalking APM
https://skywalking.apache.org/
Apache License 2.0
447 stars 122 forks source link

NewExitSpan--err is span type is wrong #113

Closed lyf131411 closed 2 years ago

lyf131411 commented 3 years ago

将sampler设置为0.1时,调用CreateExitSpan报一下错误,这是什么原因呢? vendor/github.com/SkyAPM/go2sky.(*Tracer).CreateExitSpan vendor/github.com/SkyAPM/go2sky/trace.go:163

Luckyboys commented 2 years ago

看了一下tracer.go的代码,当 IsSampledfalse 的时候,CreateLocalSpan返回的 (s Span, c context.Context, err error) 里面的接口类型为Span,实际上应该是 *NoopSpan 类型

而在

    noopSpan, ok := interface{}(s).(NoopSpan)
    if ok {
        // Ignored, there is no need to inject SW8 in the request header
        return &noopSpan, nCtx, nil
    }

里面,尝试转换的类型是值型的 NoopSpan,应该就会转换不成功,所以如果改成了 *NoopSpan 就会正常了。

不过上面这个是推论,我需要实践验证一下。