如何保持http.Request.Body在Transport.RoundTrip中不关闭?

I build a proxy,when proxy to 127.0.0.1:9902 fail,then proxy to 127.0.0.1:9903.

But, when proxy to 127.0.0.1:9902 fail,the http request body be closed in Transport.RoundTrip,so proxy to 127.0.0.1:9903 will be error(invalid Read on closed Body).

I have been plagued for a long time.any master can help me and give an idea to proxyTo function by the way? thank you very much!

func proxy(w http.ResponseWriter, r *http.Request) {
    ok := proxyTO("http://127.0.0.1:9902", w, r)  //server127.0.0.1:9902 not open,so r.Body close after proxyTo
    if ok == false {
        proxy1("http://127.0.0.1:9903", w, r)   //error http: invalid Read on closed Body
    }
}

//any idea on proxyTo function?
func proxyTo(addr string, w http.ResponseWriter, r *http.Request) bool {
    urlLs, _ := url.Parse(addr)
    r.URL.Host = urlLs.Host
    r.URL.Scheme = urlLs.Scheme
    r.Host = urlLs.Host
    r.RequestURI = ""

    resp, err := http.DefaultTransport.RoundTrip(r)    //how to keep r.Body not close when error
    if err != nil {
        return false
    }
    if resp.StatusCode != http.StatusOK {
        w.WriteHeader(resp.StatusCode)
        return true              //here return is ok? 
    }
    for name, vals := range resp.Header {
        for _, val := range vals {
            w.Header().Add(name, val)
        }
    }
    io.Copy(w, resp.Body)

    resp.Body.Close()
    return true
}