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

Pra*_*eek 2 buffer httprequest go

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

我得到的错误是:

不能使用req.Body(类型字符串)作为http.NewRequest参数中的类型io.Reader: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类型的问题)

Elw*_*nar 6

此错误意味着该http.NewRequest方法将io.Reader接口作为其body参数:

func NewRequest(method, urlStr string, body io.Reader) (*Request, error)
Run Code Online (Sandbox Code Playgroud)

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

"问题"是a string没有实现io.Reader接口,定义如下:

type Reader interface {
   Read(p []byte) (n int, err error)
}
Run Code Online (Sandbox Code Playgroud)

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

func NewReader(s string) *Reader
Run Code Online (Sandbox Code Playgroud)

提示:您还有一个bytes.Reader类型[]byte作为参数传递.