所以,我正在使用GO解析POST。我想要的是帖子的正文,所以我尝试以下内容(r
在此上下文中的类型为*http.Request
):
var body io.Reader
var d []byte
body = r.Body.Reader
body.Read( d)
但是,这会导致编译错误:
Compile error: <file>:44:
r.Body.Reader undefined (type io.ReadCloser has no field or method Reader)
奇。我本可以发誓它是在文档中定义的......啊! here it is
现在,我对Go来说相当新,但这有点奇怪 - 我搞砸了什么?
答案 0 :(得分:6)
在您的链接中,ReadCloser
的文档是:
type ReadCloser interface {
Reader
Closer
}
这告诉您的是,ReadCloser接口由Reader
和Closer
功能组成。这两者都是。这意味着ReadCloser
采用了这些接口定义。他们实际上不是成员,也就是你访问它们的方式。
Reader
是:
type Reader interface {
Read(p []byte) (n int, err error)
}
这意味着您应该像这样访问Read
:
body = r.Body
body.Read(d)
答案 1 :(得分:0)
在Go文档中定义接口的方式,看起来它是一个“has-a”关系。它实际上是一个“is-a”关系,所以下面的代码做了我想要的:
var d []byte
r.Body.Read(d)