code: func (c *Client) DoWithAppSpan(req *http.Request, name string) (res *http.Response, err error) {
  	var parentContext model.SpanContext
  
  	if span := zipkin.SpanFromContext(req.Context()); span != nil {
  		parentContext = span.Context()
  	}
  
  	appSpan := c.tracer.StartSpan(name, zipkin.Parent(parentContext))
  
  	zipkin.TagHTTPMethod.Set(appSpan, req.Method)
  	zipkin.TagHTTPPath.Set(appSpan, req.URL.Path)
  
  	res, err = c.Client.Do(
  		req.WithContext(zipkin.NewContext(req.Context(), appSpan)),
  	)
  	if err != nil {
  		zipkin.TagError.Set(appSpan, err.Error())
  		appSpan.Finish()
  		return
  	}
  
  	if c.httpTrace {
  		appSpan.Annotate(time.Now(), "wr")
  	}
  
  	if res.ContentLength > 0 {
  		zipkin.TagHTTPResponseSize.Set(appSpan, strconv.FormatInt(res.ContentLength, 10))
  	}
  	if res.StatusCode < 200 || res.StatusCode > 299 {
  		statusCode := strconv.FormatInt(int64(res.StatusCode), 10)
  		zipkin.TagHTTPStatusCode.Set(appSpan, statusCode)
  		if res.StatusCode > 399 {
  			zipkin.TagError.Set(appSpan, statusCode)
  		}
  	}
  
  	res.Body = &spanCloser{
  		ReadCloser:   res.Body,
  		sp:           appSpan,
  		traceEnabled: c.httpTrace,
  	}
  	return
  }
docs: // DoWithAppSpan wraps http.Client's Do with tracing using an application span.