Gin: c.Request verwenden.Körper braucht Schließen?

Erstellt am 24. Jan. 2018  ·  3Kommentare  ·  Quelle: gin-gonic/gin

func Test(c *gin.Context) {
defer c.Request.Body.Close()

b, _ := ioutil.ReadAll(c.Request.Body)

fmt.Println(string(b))

}

Hilfreichster Kommentar

Sie müssen den Hauptteil der Anfragen nicht schließen. gin verwendet das ursprüngliche net/http Paket, net/http schließt sie automatisch.

gins Handler werden hier aufgerufen.
https://github.com/golang/go/blob/release-branch.go1.10/src/net/http/server.go#L1830

und finishRequest() schließt den Hauptteil der Anfragen.
https://github.com/golang/go/blob/release-branch.go1.10/src/net/http/server.go#L1835

Alle 3 Kommentare

@IIInsomnia Ich habe die gleiche Frage. Müssen wir den Körper also manuell schließen?

Sie müssen den Hauptteil der Anfragen nicht schließen. gin verwendet das ursprüngliche net/http Paket, net/http schließt sie automatisch.

gins Handler werden hier aufgerufen.
https://github.com/golang/go/blob/release-branch.go1.10/src/net/http/server.go#L1830

und finishRequest() schließt den Hauptteil der Anfragen.
https://github.com/golang/go/blob/release-branch.go1.10/src/net/http/server.go#L1835

Ja, wir müssen nicht schließen. Ich habe auch die dazugehörigen Kommentare gefunden.

    // Body is the request's body.
    //
    // For client requests a nil body means the request has no
    // body, such as a GET request. The HTTP Client's Transport
    // is responsible for calling the Close method.
    //
    // For server requests the Request Body is always non-nil
    // but will return EOF immediately when no body is present.
    // The Server will close the request body. The ServeHTTP
    // Handler does not need to.
    Body io.ReadCloser

weitere Infos: https://github.com/golang/go/blob/master/src/net/http/request.go#L171

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen