How to Stream an HTTP Response Body in Go

Web
Stream HTTP response bodies in Go by reading Response.Body as an io.Reader in a loop or using io.Copy for direct transfer.

Stream an HTTP response body in Go by reading Response.Body as an io.Reader inside a loop until io.EOF.

resp, err := http.Get(url)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

buf := make([]byte, 1024)
for {
    n, err := resp.Body.Read(buf)
    if err != nil && err != io.EOF {
        log.Fatal(err)
    }
    if n == 0 {
        break
    }
    // Process buf[:n]
    if err == io.EOF {
        break
    }
}

Alternatively, use io.Copy to stream directly to a writer:

resp, err := http.Get(url)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

_, err = io.Copy(os.Stdout, resp.Body)
if err != nil {
    log.Fatal(err)
}