Go中的Http代理,完全不保存服务器的响应

I'm trying to create a simple HTTP proxy in Go. I'd like to "pipe" the response from the server directly to the caller client, without actually saving the response in the proxy's heap.

Let's say I do a http.Get("url") request, the response will contain a "Body" attribute, which is an io.Reader. I would like to "pipe" this into the http.responseWriter I get in the handler function

I have looked into a few things - 1. io.Copy 2. io.CopyBuffer 3. io.Pipe

What I don't understand is this: if the proxy will connect the streams, will it actually not need to save the response to its heap? Meaning, if the Get request leads to a download of a 1GB file, does the proxy server's heap needs at least 1GB free?

If so, can any of the functions I mentioned above can help? That's what I thought the pipe to do. If not, which of these is better for my use case?

func handleHttpRequests(httpResponseWriter http.ResponseWriter, httpRequest *http.Request) {
    res, err := http.Get("http://localhost:9876")
    defer res.Body.Close()
    copyHeaders(httpResponseWriter.Header(), res.Header)
    io.Copy(httpResponseWriter, res.Body)
}