当我在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类型的问题)
答案 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
类型。