0

因此,我正在使用 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)

奇怪的。我可以发誓它是在文档中定义的......啊!在这里

现在,我对 Go 很陌生,但这闻起来有点奇怪——我搞砸了什么?

4

2 回答 2

6

从您的链接中, a 的文档ReadCloser是:

type ReadCloser interface {
    Reader
    Closer
}

这告诉您的是,ReadCloser 接口由 aReader和 aCloser功能组成。两者都是。这意味着ReadCloser对这些接口定义的接受。它们实际上不是成员,您访问它们的方式。

一个Reader是:

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

这意味着您应该Read像这样访问:

body = r.Body
body.Read(d)
于 2012-09-07T19:46:34.813 回答
0

在 Go 文档中定义接口的方式,看起来像是一种“具有”关系。它实际上是一个“is-a”关系,所以下面的代码做我想要的:

var d []byte
r.Body.Read(d)
于 2012-09-07T19:47:18.683 回答