code: func injectOpentracingIdsToTags(span opentracing.Span, tags grpc_ctxtags.Tags) {
  	if err := span.Tracer().Inject(span.Context(), opentracing.HTTPHeaders, &tagsCarrier{tags}); err != nil {
  		grpclog.Infof("grpc_opentracing: failed extracting trace info into ctx %v", err)
  	}
  }
docs: // injectOpentracingIdsToTags writes trace data to ctxtags.
  // This is done in an incredibly hacky way, because the public-facing interface of opentracing doesn't give access to
  // the TraceId and SpanId of the SpanContext. Only the Tracer's Inject/Extract methods know what these are.
  // Most tracers have them encoded as keys with 'traceid' and 'spanid':
  // https://github.com/openzipkin/zipkin-go-opentracing/blob/594640b9ef7e5c994e8d9499359d693c032d738c/propagation_ot.go#L29
  // https://github.com/opentracing/basictracer-go/blob/1b32af207119a14b1b231d451df3ed04a72efebf/propagation_ot.go#L26
  // Jaeger from Uber use one-key schema with next format '{trace-id}:{span-id}:{parent-span-id}:{flags}'
  // https://www.jaegertracing.io/docs/client-libraries/#trace-span-identity