2013-10-10 2 views
1

в http.Request type Тело закрывается, когда запрос отправляется клиентом. Почему он должен быть закрыт, почему он не может быть строкой, которую вы можете читать снова и снова?Что такое lang http.Request Body в терминах информатики?

+4

Ищите «поток». Как только вам понадобятся некоторые действия или вы хотите обрабатывать большие данные, вы не можете просто играть со строками. –

+0

Мне нравится ваш anwser. Я соглашусь. Было бы неплохо, если бы вы поместили некоторые ссылки или разработали их. –

ответ

7

Это называется stream. Это полезно, потому что позволяет обрабатывать данные без наличия всего набора данных в памяти. Он также позволяет вам дать результаты операций, которые вы можете выполнять быстрее: вы не ждете, пока весь набор будет вычислен.

Как только вы хотите обрабатывать большие данные или беспокоиться о производительности, вам нужны потоки.

Это также удобная абстракция, которая позволяет обрабатывать данные по одному, даже если весь комплект доступен, без необходимости обрабатывать смещение для повторения по всему.

2

Вы можете сохранить поток запроса в виде строки, используя bytes и io пакет:

func handler(w http.ResponseWriter, r *http.Request) { 
    var bodyAsString string 
    b := new(bytes.Buffer) 

    _, err := io.Copy(b, r) 
    if err == io.EOF { 
     bodyAsString = b.String() 
    } 
} 
Смежные вопросы