*http.Request

来源:7-12 课程总结(回顾,延伸和优化)

tom睡着了

2019-03-16

老师我想请教一下,为什么request的body只能读取一次。
示例程序:

func main() {
	r := gin.Default()

	r.POST("/test", func(ctx *gin.Context) {
		var (
			err  error
			body []byte
		)
		if body, err = ioutil.ReadAll(ctx.Request.Body); err != nil {
			panic(err)
		}
		log.Printf("body: %s", string(body))

		// 第二次读取,Request.Body的内容为空
		if body, err = ioutil.ReadAll(ctx.Request.Body); err != nil {
			panic(err)
		}
		log.Printf("body: %s", string(body))
	})

	http.ListenAndServe(":8080", r)
}
写回答

1回答

艾文西

2019-03-17

没明白你意思?读取一次?r.Body本来就是request请求时server端拿到的内容,这个不存在只能读取一次的说法

0
1
tom睡着了
老师,我修改了下问题,然后又看了下文档,造成这个问题的原因是不是因为Request.Body是ReadCloser类型,当首次读完body后,body会被自动关闭?
2019-03-17
共1条回复

Go语言实战流媒体视频网站,高效学习Go高性能开发

从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能

996 学习 · 268 问题

查看课程