Golang无法从请求获取正文.GetBody()

jon*_*gen 13 go

我尝试通过request.GetBody()读取请求体,因为我需要多次读取同一个请求体,但我总是得到以下错误.我检查了req.body是否为空,但事实并非如此.我甚至不能打电话给req.GetBody().我的Go版本是1.8.1.

 func read(res http.ResponseWriter, req *http.Request) {

     _, err := req.GetBody()
    if err != nil {
        res.Write([]byte(err.Error()))
        return
    }

}
Run Code Online (Sandbox Code Playgroud)

错误:

http: panic serving [::1]:53174: runtime error: invalid memory address or nil pointer dereference
Run Code Online (Sandbox Code Playgroud)

Pau*_*ulJ 15

GetBody()FUNC上Request仅适用于客户端的请求(参见在文档GetBody成员:https://golang.org/pkg/net/http/#Request),但它看起来像你正在做一个服务器端的处理程序.因此,您需要使用req.Body成员,这是一个io.ReadCloser.要从中读取,io.ReadCloser您可以使用io/ioutil包和ReadAll()func:

b, err := ioutil.ReadAll(req.Body)
if err != nil {
    panic(err)
}

fmt.Printf("%s", b)
Run Code Online (Sandbox Code Playgroud)

有关ReadAll()func的更多信息:https://golang.org/pkg/io/ioutil/#example_ReadAll