Вы должны использовать тело запроса.
baseUrl := "Some url that i call to fetch csv file"
client := http.Client{}
resp, _ := client.Get(baseUrl)
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body) // this line.
fmt.Println(resp)
, если вам приходится иметь дело с данными многочастной формы https://golang.org/pkg/net/http/#Request.FormFile
Учитывая следующий комментарий,
Теперь я вижу после печати, соответственно, что есть текст в формате csv, но введите http.Response Мне нужно разобраться с golang.org/pkg/encoding/csv/#Reader, как включить или отключить строку, чтобы иметь возможностьчитатель, чтобы прочитать его, или я что-то пропустил?
OP должен понимать, что тело ответа http реализует интерфейс io.Reader
. Когда HTTP-ответ возвращается с сервера, тело не считывается непосредственно в память, так как фрагмент байтов []byte
.
OP должен также отметить, что csv.Reader
является реализацией для декодирования CSV-кодированного содержимого. который потребляет io.Reader
. Под капотом он не хранит все содержимое файла в памяти, он читает то, что необходимо для декодирования одной строки и продолжения.
Вследствие этих двух важных свойств реализации Голанга, этопросто и естественно подключить считыватель тела ответа к считывателю csv.
На вопрос, что такое io.Reader
, OP должен выяснить, что он способен читать поток байтов кусками max lenп. Это иллюстрируется сигнатурой уникального метода этого интерфейса Read([]byte) (int, error)
Этот интерфейс разработан таким образом, что он минимизирует потребляемую память и выделения.
ref links
Все, что сказано, окончательный код написан тривиально,
package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"net/http"
)
func main() {
baseUrl := "https://geolite.maxmind.com/download/geoip/misc/region_codes.csv"
client := http.Client{}
resp, err := client.Get(baseUrl)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
fmt.Println(resp)
r := csv.NewReader(resp.Body)
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Println(record)
}
}