Skip to content

Latest commit

 

History

History
24 lines (21 loc) · 1.38 KB

File metadata and controls

24 lines (21 loc) · 1.38 KB

Когда мы закрываем тело, поведение различается в зависимости от того, прочитано что-то из него или нет:

  • Если мы закроем тело без чтения, HTTP-транспорт, используемый по умолчанию, может закрыть соединение.
  • Если мы закроем тело после чтения, используемый по умолчанию HTTP-транспорт не закроет соединение; следовательно, его можно будет использовать и далее.

Если `getStatusCode`` вызывается повторно и мы хотим использовать остающиеся неразорванные соединения, то нужно прочитать тело, даже если его содержание нас не интересует:

func (h handler) getStatusCode(body io.Reader) (int, error) {
	resp, err := h.client.Post(h.url, "application/json", body)
	if err != nil {
		return 0, err
	}
	// Закрытие тела ответа
	defer func() {
		err := resp.Body.Close()
		if err != nil {
			 log.Printf("failed to close response: %v\n", err)
		}
	}()
	_, _ = io.Copy(io.Discard, resp.Body) // чтение тела ответа "в никуда"
	return resp.StatusCode, nil
}