2.io.go_reader接口
按照惯例,还是先从第一个方法(接口)看起吧。
1 | type Reader interface { |
第一个是接口,其实在io的操作里面,Reader和Write是必不可少的东西,可是如此一来,这个接口是在哪里实现的呢?
在网上,我找到一个例子。
1 | func main() { |
可以看到,传入的是一个io.Reader类型,而这个类型经由strings.NewReader(“from string”)转化。
于是我又转到string包中,发现了对Reader接口的实行。
1 | func (r *Reader) Read(b []byte) (n int, err error) { |
它是继承自
1 | // A Reader implements the io.Reader, io.ReaderAt, io.Seeker, io.WriterTo, |
从注释上就可以看出,这个结构体又实现了io.Reader, io.ReaderAt, io.Seeker, io.WriterTo,io.ByteScanner, and io.RuneScanner这么多的接口。。
先撸一遍代码的顺序
step.1:strings.NewReader("from string")
step.2:转入string包的reader.go
step.3:返回func NewReader(s string) *Reader { return &Reader{s, 0, -1} }把Reader结构体(其实是对象)返回。
step.4:p := make([]byte, num)初始化一个比特变量
step.5:n, err := reader.Read(p)调用reader对象的Read方法,返回比特数据。
总得来说,Reader这个接口是交给其它的方法去自行实现的接口,他本身不作任何数据处理。除了上面的读取字符串以外。还有:
os.Stdin读取输入的流
位于os包的file.go文件中
1 | func (f *File) Read(b []byte) (n int, err error) { |
还有位于读取文件:os.Open(同上)
其实我最想了解的是网络io一块的内容,在net包中,不过暂时先放一下了,等下次读到net的时候再深入一下。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!










