Golang无法从request.GetBody()

时间:2017-10-05 06:45:44

标签: 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
    }

}

错误:

http: panic serving [::1]:53174: runtime error: invalid memory address or nil pointer dereference

2 个答案:

答案 0 :(得分:14)

GetBody()上的Request func仅用于客户端请求(请参阅GetBody成员的文档:https://golang.org/pkg/net/http/#Request),但看起来您正在做服务器端处理程序。因此,您需要使用req.Body成员io.ReadCloser。要从io.ReadCloser阅读,您可以使用io/ioutil包和ReadAll()功能:

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

fmt.Printf("%s", b)

有关ReadAll() func:https://golang.org/pkg/io/ioutil/#example_ReadAll

的更多信息

答案 1 :(得分:-3)

这意味着您的req变量为nil