2016-07-19 26 views
3

zurückgeben Ich versuche, eine Gzip-Antwort mit dem Golang-Framework Gin zurückgeben.Wie Gzip Antwort für Golang Gin-Framework

Sie bieten hier ein Beispiel: 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") 
} 

Wenn ich dieses Beispiel sein nicht gzipped Inhalt zurück.

Mit dem obigen Code ich die folgende Ausgabe von 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???? 

Beachten Sie den Inhalt erhalten, ist nicht im gzip und es gibt zusätzliche Junk-Zeichen hinzugefügt.

"? N ????"

Bis jetzt kann ich nicht herausfinden, wie man es bringt, gzip zurückzugeben. Ich denke, es gibt einen Fehler im Beispielcode, aber ich habe Probleme, es herauszufinden.

Vielen Dank im Voraus.

Antwort

1

Jemand anderes hatte ein Problem mit gzip. Ihre Pull-Anfrage löste dieses Problem für mich. Es ist ein Fehler im Gzip-Paket für Gin-Framework.

Diese Methode fehlte von contrib/gzip/gzip.go

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

Link zur ursprünglichen Frage, die Pull-Anforderung enthält. https://github.com/gin-gonic/contrib/pull/59

Sobald der Besitzer des Projekts die Pull-Anforderung akzeptiert, wird dieses Problem behoben.