func()

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
}