code: func StartSpanFromContext(ctx context.Context, operationName string, opts ...opentracing.StartSpanOption) (opentracing.Span, context.Context) {
  	var tracer opentracing.Tracer
  	if parentSpan := opentracing.SpanFromContext(ctx); parentSpan != nil {
  		opts = append(opts, opentracing.ChildOf(parentSpan.Context()))
  		tracer = parentSpan.Tracer()
  	} else {
  		tracer = getGlobalTracer()
  	}
  
  	span := tracer.StartSpan(operationName, opts...)
  
  	return span, opentracing.ContextWithSpan(ctx, span)
  }
docs: // StartSpanFromContext is the same as opentracing.StartSpanFromContext, but instead of always using the global tracer,
  // it attempts to use the parent span's tracer if it's available. This behavior is (arguably) more flexible--it allows
  // a locally set tracer to be used when needed (as in tests)--while being equivalent to the original in most contexts.
  // See https://github.com/opentracing/opentracing-go/issues/149 for more discussion.