Use io.ReadFull to slurp up the desired number of bytes on each iteration of the loop.
buf := make([]byte, 10)
for {
_, err := io.ReadFull(r.Body, buf)
if err == io.ErrUnexpectedEOF || err == io.EOF {
// Success!
break
} else if err != nil {
// Something bad happened.
log.Fatal(err)
}
time.Sleep(time.Second)
}