in tracing/impl/stackdriver_tracer.go [34:67]
func (tracer *adapterTracer) StartSpan(operationName string, opts ...opentracing.StartSpanOption) opentracing.Span {
sso := opentracing.StartSpanOptions{}
for _, o := range opts {
o.Apply(&sso)
}
var ctx context.Context
var adapterSpanCtx *adapterSpanContext
ctx = context.Background()
for _, ref := range sso.References {
if ref.Type == opentracing.ChildOfRef {
if v, ok := ref.ReferencedContext.(adapterSpanContext); ok {
ctx = v.ctx
adapterSpanCtx = &v
break
}
}
}
var span *trace.Span
if adapterSpanCtx != nil && adapterSpanCtx.remote {
ctx, span = trace.StartSpanWithRemoteParent(ctx, operationName, *adapterSpanCtx.ocSpanCtx)
} else {
ctx, span = trace.StartSpan(ctx, operationName)
}
spanContext := span.SpanContext()
adapterSpan := &adapterSpan{span, tracer, adapterSpanContext{ctx, false, &spanContext}}
for k, v := range sso.Tags {
adapterSpan.SetTag(k, v)
}
return adapterSpan
}