I'm trying to return a gzip response using the golang framework gin.
They provide an example here: 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")
}
When I use this example its not returning gzipped content.
With the code above I get the following output from 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????
Notice the content is not gzipped and there are extra junk characters added on.
"?n????"
So far I can't figure out how to get it to return gzip. I think there is a mistake in the example code but I'm having trouble figuring it out.
Thank you in advance.
Someone else had an issue with gzip. Their pull request resolved this problem for me. It's a bug in the gzip package for gin framework.
This method was missing from contrib/gzip/gzip.go
func (g *gzipWriter) WriteString(s string) (n int, err error) {
return g.writer.Write([]byte(s))
}
Link to original issue that includes pull request. https://github.com/gin-gonic/contrib/pull/59
Once the owner of the project accepts the pull request this issue will be resolved.