Go语言中的io.Reader和io.Writer以及它们的实现

caiyang101 · · 3351 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在使用Go语言的过程中,无论你是实现web应用程序,还是控制台输入输出,又或者是网络操作,不可避免的会遇到IO操作,使用到io.Reader和io.Writer接口。也也许对这两个接口和相关的一些接口很熟悉了,但是你脑海里确很难形成一个对io接口的继承关系整天的概貌,原因在于godoc缺省并没有像javadoc一样显示官方库继承关系,这导致了我们对io接口的继承关系记忆不深,在使用的时候还经常需要翻文档加深记忆。本文试图梳理清楚Go io接口的继承关系,提供一个io接口的全貌。

io接口回顾

首先我们回顾一下几个常用的io接口。标准库的实现是将功能细分,每个最小粒度的功能定义成一个接口,然后接口可以组成成更多功能的接口。

最小粒度的接口

typeReaderinterface{
 Read(p []byte) (nint, err error)
}
typeWriterinterface{
 Write(p []byte) (nint, err error)
}
typeCloserinterface{
 Close() error
}
typeSeekerinterface{
 Seek(offset int64, whenceint) (int64, error)
}
typeReaderFrominterface{
 ReadFrom(r Reader) (n int64, err error)
}
typeWriterTointerface{
 WriteTo(w Writer) (n int64, err error)
}
typeReaderAtinterface{
 ReadAt(p []byte, offint64) (nint, err error)
}
typeWriterAtinterface{
 WriteAt(p []byte, offint64) (nint, err error)
}
typeByteReaderinterface{
 ReadByte() (byte, error)
}
typeByteWriterinterface{
 WriteByte(c byte) error
}

ByteScanner比ByteReader多了一个 UnreadByte 方法。

typeByteScannerinterface{
 ByteReader
 UnreadByte() error
}
typeRuneReaderinterface{
 ReadRune() (r rune, sizeint, err error)
}
typeRuneScannerinterface{
 RuneReader
 UnreadRune() error
}

组合接口

Go标准库还定义了一些由上面的单一职能的接口组合而成的接口。

typeReadCloserinterface{
 Reader
 Closer
}
typeReadSeekerinterface{
 Reader
 Seeker
}
typeReadWriterinterface{
 Reader
 Writer
}
typeReadWriteCloserinterface{
 Reader
 Writer
 Closer
}
typeReadWriteSeekerinterface{
 Reader
 Writer
 Seeker
}
typeWriteCloserinterface{
 Writer
 Closer
}
typeWriteSeekerinterface{
 Writer
 Seeker
}

从它们的定义上可以看出,它们是最小粒度的组合。

最小接口的扩展

有些结构体struct实现并且扩展了接口,这些结构体是。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:caiyang101

查看原文:Go语言中的io.Reader和io.Writer以及它们的实现

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

3351 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传