最小接口的扩展
有些结构体struct实现并且扩展了接口,这些结构体是。
type LimitedReader struct {
R Reader // underlying reader
N int64 // max bytes remaining
}
type PipeReader struct {
// contains filtered or unexported fields
}
type PipeWriter struct {
// contains filtered or unexported fields
}
type SectionReader struct {
// contains filtered or unexported fields
}
下面我会将它们的继承关系画出来。
一些辅助方法
一些辅助方法可以生成特殊类型的Reader或者Writer:
func LimitReader(r Reader, n int64) Reader
func MultiReader(readers ...Reader) Reader
func TeeReader(r Reader, w Writer) Reader
func MultiWriter(writers ...Writer) Writer
三、继承关系
当然,Go语言中并没有Java中那样的继承关系,而是基于duck type形式实现,我用下图尝试展示Go io接口的继承关系。

其中黄色是 bufio 包下的类型,
绿色是 archive.tar 包下的类型,
蓝色是 bytes 包下的类型,
粉红色是 strings包下的类型,
紫色是 crypto.tls 包下的类型。
Rand是math.rand包下的类型。
File是os包下的内容。
`Rand`左边的那个Reader是image.jpeg下的内容。
我们最常用的是包io、bytes、bufio下的类型,所以这几个包下的类型要记牢,在第三库中经常会出现它们的身影。
上图中并没有把mime/multipart.File和 net/http.File列出来,主要是图太复杂了,它们实现的接口和os.File类似。
当然你可能会问,你怎么整理的它们的继承关系?事实上,你可以通过godoc -analysis=type -http=:6060生成带继承关系的Go doc,并且它还可以将你本地下载的库中的继承关系也显示出来。

四、总结
以上就是关于Go语言中io.Reader和io.Writer的详解与实现的全部内容,希望这篇文章的内容对大家的学习和工作能有所帮助,如果有疑问可以留言交流。









