Как вернуть ответ gzip для фреймворка golang gin

Я пытаюсь вернуть ответ gzip, используя gin framework golang.

Здесь приводится пример: https://github.com/gin-gonic/contrib/blob/master/gzip/example/example.go

package main

import (
    "fmt"
    "github.com/gin-gonic/contrib/gzip"
    "github.com/gin-gonic/gin"
    "time"
)

func main() {
    r := gin.Default()
    r.Use(gzip.Gzip(gzip.DefaultCompression))
    r.GET("/ping", func(c *gin.Context) {
        c.String(200, "pong "+fmt.Sprint(time.Now().Unix()))
    })

    // Listen and Server in 0.0.0.0:8080
    r.Run(":8080")
}

Когда я использую этот пример, он не возвращает сжатый контент.

С помощью приведенного выше кода я получаю следующий вывод из curl

curl -v -H "Accept-Encoding: gzip" 'http://localhost:8080/ping'

Trying ::1...
Connected to localhost (::1) port 8080 (#0) GET /ping HTTP/1.1 Host: localhost:8080 User-Agent: curl/7.43.0 Accept: / Accept-Encoding: gzip
< HTTP/1.1 200 OK
< Content-Encoding: gzip
< Content-Type: text/plain; charset=utf-8
< Vary: Accept-Encoding
< Date: Mon, 18 Jul 2016 17:20:56 GMT
< Content-Length: 38
<

Connection #0 to host localhost left intact pong 1468862456?n????

Обратите внимание, что содержимое не заархивировано, и в него добавлены лишние символы нежелательной почты.

"?n????"

Пока не могу понять, как заставить вернуть gzip. Я думаю, что в примере кода есть ошибка, но мне трудно ее понять.

Заранее спасибо.


person Chris Passas    schedule 19.07.2016    source источник


Ответы (1)


У кого-то была проблема с gzip. Их запрос на перенос решил эту проблему для меня. Это ошибка в пакете gzip для фреймворка gin.

Этот метод отсутствовал в contrib / gzip / gzip.go

func (g *gzipWriter) WriteString(s string) (n int, err error) {
    return g.writer.Write([]byte(s))
}

Ссылка на исходный выпуск, включающий запрос на перенос. https://github.com/gin-gonic/contrib/pull/59

Как только владелец проекта примет запрос на перенос, эта проблема будет решена.

person Chris Passas    schedule 19.07.2016