code: func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error) {
  	collector, err := zipkin.NewHTTPCollector(c.HTTPEndpoint)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	recorder := zipkin.NewRecorder(collector, c.Debug, "0.0.0.0:0", serviceName)
  
  	tracer, err := zipkin.NewTracer(
  		recorder,
  		zipkin.ClientServerSameSpan(c.SameSpan),
  		zipkin.TraceID128Bit(c.ID128Bit),
  		zipkin.DebugMode(c.Debug),
  		zipkin.WithSampler(zipkin.NewBoundarySampler(c.SampleRate, time.Now().Unix())),
  	)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	// Without this, child spans are getting the NOOP tracer
  	opentracing.SetGlobalTracer(tracer)
  
  	log.WithoutContext().Debug("Zipkin tracer configured")
  
  	return tracer, collector, nil
  }
docs: // Setup sets up the tracer