100-go-mistakes/10-standard-lib/79-closing-resources/http/main.go
2021-12-27 15:56:17 +01:00

81 lines
1.3 KiB
Go

package main
import (
"io"
"log"
"net/http"
)
func (h handler) getBody1() (string, error) {
resp, err := h.client.Get(h.url)
if err != nil {
return "", err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}
func (h handler) getBody2() (string, error) {
resp, err := h.client.Get(h.url)
if err != nil {
return "", err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return "", err
}
defer func() {
err := resp.Body.Close()
if err != nil {
log.Printf("failed to close response: %v\n", err)
}
}()
return string(body), nil
}
func (h handler) getStatusCode1(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)
}
}()
return resp.StatusCode, nil
}
func (h handler) getStatusCode2(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
}
type handler struct {
client http.Client
url string
}