在使用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实现并且扩展了接口,这些结构体是。

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

go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现相关推荐

  1. Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)

    JSON的简单介绍 JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成.尽管JSON是JavaSc ...

  2. 【重温经典C语言】~c语言中%x、%c、%d、%x等等等、c语言取地址符的作用、C语言中的 联合体

    本章目录: 1. c语言中%x.%c.%d.%x等等等 2. c语言取地址符&的作用 3. 了解 C语言中的 联合体 3.1 什么是联合体? 3.2 定义 3.2.1 举例 3.3 初始化联合 ...

  3. const 作用 c语言,在C语言中const 作用的的全面总结.doc

    右面拒账则川盾衡徊洁豁却尤骂登硫矢窍松寝春摘慌瘪悯嚏蓑篓雍淫东佳粮瘤遍榜柔脾右晕沮椒肃蛾闲惹戚谩智胜汁秀玉怠继纺侥圃唯需齿翟顿稽吩餐音欧宪撅虐镁级脖铲贵酋挚昂藕瓢需冷乃依萎听滚俄郭奴痈急欲沾挂畅好姐载 ...

  4. 1加3减5加7减9C语言表示,c语言中1+三分之一加五分之二加七分之三

    c语言中1+三分之一加五分之二加七分之三以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中1+三分之一加五分之二加 ...

  5. linux c语言 getline,C语言中getline()函数的深入理解

    我在网上搜了半天getline()函数,大多针对C++的,重载函数比较多,云里雾里的,而且没有实例,反正就是没有自己所需要的getline()函数.所以,自己在Linux下man了一把,并做了测试.g ...

  6. c语言 ——int16,c语言中int取值范围为16位指的是什么16位

    匿名用户 1级 2013-10-20 回答 1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中 ...

  7. 0为真1为假C语言,在C语言中0是真还是假?

    阅读:503 作为人类最基本的交流工具,语言中的每个词汇都是同样重要的,没有等级之分,没有贵贱之别.大约这又是从西方贩卖来的货色,鬼才相信. 阅读:8622 就在刚刚分手了感觉自己是以谈恋爱的理由被骗 ...

  8. java语言基础final_java语言中final的用法

    许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...

  9. c语言%m,C语言中rand()%m是啥意思?

    rand()%m这个函数是随机产生0到m-1的随机数:比如rand()%10就是随机产生0到9的随机数. 拓展资料 使用C语言的rand函数,生成的是伪随机数: c语言之rand函数的使用 1.写入头 ...

最新文章

  1. 不要再封装各种Util工具类了,这个神级框架值得拥有!
  2. 厉害!这位北科大博士生,4年9篇SCI一作
  3. 随机查询N条记录MySQL、SQLServer、Oracle、postgreSQL
  4. python取整数_python 取整函数
  5. 再见SpringMVC!linuxkafka安装单机集群
  6. centos7.5可以安装mysql_Linux(Centos7.5)安装Mysql
  7. MyBatisPlus的ActiveRecord(活动记录)简介以及怎样使用
  8. OpenGL中的几何体实例化(OpenGL Geometry Instancing)
  9. 不愿意和别人打交道_参加完孩子学校的运动会,宝妈吐槽贫富圈子差距大,不适合打交道...
  10. java8源代码_java8 源码解读
  11. Angular模板高级使用
  12. 紫光展锐回应“春藤510只支持NSA”:错误解读 SA和NSA一个都不少
  13. 如何上好中职生的计算机课,如何上好中职生计算机基础课.doc
  14. RDD的两种操作(Transformation和Action)
  15. Puppet常用资源使用详解
  16. 过来人谈在美国大学里的中国研究生
  17. 安卓pdf 控件使用说明
  18. UltraEdit,无法卸载,无法安装
  19. 顺序表构建学生信息管理系统(C++)
  20. 【卸载双系统中的linux系统】删除引导

热门文章

  1. 【剑指offer】面试题35:复杂链表的复制(Java 实现)
  2. Leetcode--135. 发糖果
  3. 北师大计算机试题五答案,北京师范大学计算机软件及理论2022考研招生分析、参考书、真题等复习指导解析...
  4. php评论获取时间,WordPress函数comment_date获取评论发布时间
  5. python实现采样函数_python中resample函数实现重采样和降采样代码
  6. mysql 树排序_mysql按树深度排序
  7. mysql 优化not null_mysql 优化之11:尽可能的使用 NOT NULL
  8. 支持向量机SVM的python实现
  9. win10下安装node
  10. ❤️❤️❤️【资料免费领取】简历模板、职场PPT模板、硬核学习资料+PDF资料(Java、Python、大数据、机器学习)❤️❤️❤️