Go的运行时库文档已过期?

时间:2012-09-07 19:36:14

标签: google-app-engine go

所以,我正在使用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来说相当新,但这有点奇怪 - 我搞砸了什么?

2 个答案:

答案 0 :(得分:6)

在您的链接中,ReadCloser的文档是:

type ReadCloser interface {
    Reader
    Closer
}

这告诉您的是,ReadCloser接口由ReaderCloser功能组成。这两者都是。这意味着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)