当前位置: 首页 > news >正文

Go语言的io输入输出流

Go语言的输入输出流不如其他语言那么直观,由于是通过实现接口方法的隐式继承所以比较抽象,今天具体介绍一下go语言的输入输出流。

go语言输入输出在io库中,使用Reader接口,如下:

type Reader interface {Read(p []byte) (n int, err error)
}

Read方法从流中读取长度为len(p)字节数据写入p。也就是使用Read方法可以将流读到p中,从而从流中到程序中。

当Read在读取n > 0个字节后遭遇错误或者到达文件结尾时,会返回读取的字节数。它可能会在该次调用返回一个非nil的错误,或者在下一次调用时返回0和该错误

io.Reader 是一个基本的接口,用于表示数据的读取。它只有一个方法 Read

io.ReadFull从 io.Reader 中精确读取 len(buf) 字节的数据。

Writer接口是写入流接口,如下:

type Writer interface {Write(p []byte) (n int, err error)
}

Write方法将len(p) 字节数据从p写入底层的数据流。

它会返回写入的字节数(0 <= n <= len(p))和遇到的任何导致写入提取结束的错误。Write必须返回非nil的错误,如果它返回的 n < len(p)。Write不能修改切片p中的数据,即使临时修改也不行。

io.Writer 是一个基本的接口,用于表示数据的写入。它只有一个方法 Write

io.WriteStringio.Writer 写入字符串。

流复制,从输出流复制到输出流,如下:

func Copy(dst Writer, src Reader) (written int64, err error)

上述只是输入输出流的基本用法,还有许多继承类,如下:

  • os.File 同时实现了 io.Reader 和 io.Writer
  • strings.Reader 实现了 io.Reader
  • bufio.Reader/Writer 分别实现了 io.Reader 和 io.Writer
  • bytes.Buffer 同时实现了 io.Reader 和 io.Writer
  • bytes.Reader 实现了 io.Reader
  • compress/gzip.Reader/Writer 分别实现了 io.Reader 和 io.Writer
  • crypto/cipher.StreamReader/StreamWriter 分别实现了 io.Reader 和 io.Writer
  • crypto/tls.Conn 同时实现了 io.Reader 和 io.Writer
  • encoding/csv.Reader/Writer 分别实现了 io.Reader 和 io.Writer
  • mime/multipart.Part 实现了 io.Reader
  • net/conn 分别实现了 io.Reader 和 io.Writer(Conn接口定义了Read/Write)

上述包和结构体都实现了io.Reader方法,因此都可以使用Read方法将流读取到程序中。

常用的类型有:os.File、strings.Reader、bufio.Reader/Writer、bytes.Buffer、bytes.Reader

在这里插入图片描述

可以看到直接获取字节流的ReadFile方法也是调用了Read方法,如下:

在这里插入图片描述

在strings的也存在Reader接口,看源码如下:

在这里插入图片描述

等等其他几个接口也是如此,在未被封装的时候都是调用Read方法。

http://www.lryc.cn/news/442056.html

相关文章:

  • 表单里面input的type属性值有哪些?
  • 【Redis】之Geo
  • 常用的k8s容器网络模式有哪些?
  • 4位整数的数位和
  • XHTML学习
  • KTH7823——16 位高精度低延时霍尔磁编码器可编程 ABZ 和 PWM 输出模式角度传感器
  • JDBC笔记
  • 小众语言ruby在苹果中的初步应用
  • Nature: 一种基于宏基因组序列空间生成无参考的蛋白质家族的计算方法
  • play-with-docker使用指南
  • 常见中间件漏洞靶场(tomcat)
  • 一文读懂SpringCLoud
  • tcpdump使用方法
  • 密码字典txt python密码字典代码
  • ubuntu安装emqx
  • F28335 时钟及控制系统
  • 数据结构和算法之线性结构
  • 3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute
  • ai 回答HFS是什么 HTTP的文件服务器是什么
  • OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核启动】
  • 若依笔记(六):前后端token鉴权体系
  • java框架
  • 利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )
  • 【Git原理与使用】多人协作与开发模型(2)
  • Linux vi常用命令
  • 天地伟业设备主动注册协议接入SVMSPro接入
  • C++日期类详解 第二级支线任务
  • java--通用启动/停止shell脚本
  • Flutter-底部选择弹窗(showModalBottomSheet)
  • Linux——k8s认识