缓冲区问题不能在http.NewRequest golang的参数中使用<type>作为类型io.Reader

时间:2016-05-09 10:03:38

标签: go buffer httprequest

当我在golang body param中的http.NewRequest中传递字符串时,我遇到了问题。

我得到的错误是:

  

不能在参数中使用req.Body(类型字符串)作为类型io.Reader   http.NewRequest:           string没有实现io.Reader(缺少Read方法)

类似地,还有其他用例需要将Buffer作为输入而不是特定类型或其数组。 例如,当需要输入是缓冲区时,byte []。

错误是什么意思,解决问题的方法是什么,以及了解golang试图强制执行的内容。

编辑:这是我遇到问题的一行,但没有找到任何参考。

  

http.NewRequest(req.Method,req.Url,req.Body)

http.NewRequest(req.Method,req.Url,strings.NewReader(req.Body))解决了这个问题。 我还计划添加答案(作为FYI类型的问题)

1 个答案:

答案 0 :(得分:6)

此错误表示http.NewRequest方法将io.Reader接口作为其body参数:

func NewRequest(method, urlStr string, body io.Reader) (*Request, error)

以这种方式完成,因此您可以轻松地将文件,与服务器的连接,以及其他内容的响应传递给请求。

“问题”是string没有实现io.Reader接口,其定义如下:

type Reader interface {
   Read(p []byte) (n int, err error)
}

这不是一个大问题,您可以使用strings.Reader类型,它是实现所述接口的string的包装。

func NewReader(s string) *Reader

提示:对于您bytes.Reader作为参数传递的时间,还有[]byte类型。