func Test(c *gin.Context) {
defer c.Request.Body.Close()
b, _ := ioutil.ReadAll(c.Request.Body)
fmt.Println(string(b))
}
@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
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