Closed lyf131411 closed 2 years ago
看了一下tracer.go
的代码,当 IsSampled
为 false
的时候,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
就会正常了。
不过上面这个是推论,我需要实践验证一下。
将sampler设置为0.1时,调用CreateExitSpan报一下错误,这是什么原因呢? vendor/github.com/SkyAPM/go2sky.(*Tracer).CreateExitSpan vendor/github.com/SkyAPM/go2sky/trace.go:163