code: func (r *RoundTripper) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
  	if req.URL == nil {
  		closeRequestBody(req)
  		return nil, errors.New("http3: nil Request.URL")
  	}
  	if req.URL.Host == "" {
  		closeRequestBody(req)
  		return nil, errors.New("http3: no Host in request URL")
  	}
  	if req.Header == nil {
  		closeRequestBody(req)
  		return nil, errors.New("http3: nil Request.Header")
  	}
  
  	if req.URL.Scheme == "https" {
  		for k, vv := range req.Header {
  			if !httpguts.ValidHeaderFieldName(k) {
  				return nil, fmt.Errorf("http3: invalid http header field name %q", k)
  			}
  			for _, v := range vv {
  				if !httpguts.ValidHeaderFieldValue(v) {
  					return nil, fmt.Errorf("http3: invalid http header field value %q for key %v", v, k)
  				}
  			}
  		}
  	} else {
  		closeRequestBody(req)
  		return nil, fmt.Errorf("http3: unsupported protocol scheme: %s", req.URL.Scheme)
  	}
  
  	if req.Method != "" && !validMethod(req.Method) {
  		closeRequestBody(req)
  		return nil, fmt.Errorf("http3: invalid method %q", req.Method)
  	}
  
  	hostname := authorityAddr("https", hostnameFromRequest(req))
  	cl, err := r.getClient(hostname, opt.OnlyCachedConn)
  	if err != nil {
  		return nil, err
  	}
  	return cl.RoundTrip(req)
  }
docs: // RoundTripOpt is like RoundTrip, but takes options.