Как GZIP Сжимать HTTP-запрос в Go?

Мое приложение отвергает это, но когда я скручиваю данные, они работают, поэтому кажется, что есть где-то, что я смущен тем, как сжать эту полезную нагрузку http в Go.

    var buf bytes.Buffer
    g := gzip.NewWriter(&buf)
    g.Write([]byte("apples")
    req, err := http.NewRequest("POST", q.host, bytes.NewReader(buf.Bytes()))
    ...
    req.Header.Set("Content-Type", "text/plain")
    req.Header.Set("Content-Encoding", "gzip")
    resp, err := client.Do(req)

Кто-нибудь видит, где я ошибаюсь?

Ответ 1

Похоже, главная проблема в том, что мне нужно закрыть gzip Writer:

b, err := batch.Json()
....
var buf bytes.Buffer
g := gzip.NewWriter(&buf)
if _, err = g.Write(b); err != nil {
    slog.Error(err)
    return
}
if err = g.Close(); err != nil {
    slog.Error(err)
    return
}
req, err := http.NewRequest("POST", q.host, &buf)

Ответ 2

Другой способ сделать это - использовать функцию копирования

func HttpHandler2(req *http.Request) {
    var b bytes.Buffer
    var buf bytes.Buffer
    g := gzip.NewWriter(&buf)

    _, err := io.Copy(g, &b)
    if err != nil {
        slog.Error(err)
        return
    }    
}