我正在编写示例Http客户端/服务器代码以了解有关Go的更多信息.在写作过程中,我需要阅读响应主体.所以我查看了Go Pkg文档http://golang.org/pkg/net/http/#Response,看到Body io.ReadCloser即Body是io.ReaderCloser类型.为了知道什么是io.ReaderCloser,我点击了超链接,发现http://golang.org/pkg/io/#ReadCloser是一个实现Reader和Closer两种方法的接口.看着这个我以为我能做到这一点
line, _ , err := response.Body.Reader.ReadLine()
Run Code Online (Sandbox Code Playgroud)
Go编译器然后给了我错误,没有方法或者在响应中输入Reader.Body.我认为在概念上我有一个理解为什么我不能这样做的问题.也许我在java方面思考太多了.如果有人能指出我的误解,我将不胜感激.
谢谢
TLDR
身体是一个Reader.它不包含一个.只需Reader直接调用方法即可Body.
血腥细节
Go接口的10秒介绍:类型必须实现的一组方法,如果它具有所有方法,则它实现接口,周期.
接下来是嵌入你的东西.如果我们有一个界面Foo
type Foo interface {
FooIt() error
}
Run Code Online (Sandbox Code Playgroud)
我们想要另外一个接口也使用方法FooIt+一些东西,我们可以"嵌入"这样的界面.
type FooPlusPlus interface {
Foo // This embeds Foo in FooPlusPlus, making all of Foo's methods
// part of FooPlusPlus's method pool.
FooItAll() (bool, error)
}
Run Code Online (Sandbox Code Playgroud)
嵌入提供了一种编写相关接口的好方法,比如Reader和Closer.您可以还挺想它像Java中的土地继承.您没有明确要求嵌入式接口,而不是要求Java中具有子类的父类.
现在实施 FooPlusPlus
type Demo int
func (_ *Demo) FooIt() error {return nil}
func (_ *Demo) FooItAll() (bool, error) {return false, nil}
Run Code Online (Sandbox Code Playgroud)
而中提琴,现在演示是一个FooPlusPlus.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |