我尝试通过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
答案 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
。