博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go 内置库 IO interface
阅读量:4705 次
发布时间:2019-06-10

本文共 1331 字,大约阅读时间需要 4 分钟。

基本的 IO 接口

io 包为 I/O 原语提供了基本的接口。它主要包装了这些原语的已有实现。

由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户端不应假定它们对于并行执行是安全的。

在 io 包中最重要的是两个接口:Reader 和 Writer 接口。本章所提到的各种 IO 包,都跟这两个接口有关,也就是说,只要实现了这两个接口,它就有了 IO 的功能。

Reader 接口

Reader 接口的定义如下:

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

 

官方文档中关于该接口方法的说明:

Read 将 len(p) 个字节读取到 p 中。它返回读取的字节数 n(0 <= n <= len(p)) 以及任何遇到的错误。即使 Read 返回的 n < len(p),它也会在调用过程中使用 p 的全部作为暂存空间。若一些数据可用但不到 len(p) 个字节,Read 会照例返回可用的数据,而不是等待更多数据。

下面,我们通过具体例子来谈谈该接口的用法。

func ReadFrom(reader io.Reader, num int) ([]byte, error) {    p := make([]byte, num)    n, err := reader.Read(p)    if n > 0 {        return p[:n], nil    }    return p, err}

ReadFrom 函数将 io.Reader 作为参数,也就是说,ReadFrom 可以从任意的地方读取数据,只要来源实现了 io.Reader 接口。比如,我们可以从标准输入、文件、字符串等读取数据,示例代码如下:

// 从标准输入读取data, err = ReadFrom(os.Stdin, 11)// 从普通文件读取,其中 file 是 os.File 的实例data, err = ReadFrom(file, 9)// 从字符串读取data, err = ReadFrom(strings.NewReader("from string"), 12)

 

Writer 接口

Writer 接口的定义如下:

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

 

ReaderAt 和 WriterAt 接口

ReadAt 从基本输入源的偏移量 off 处开始,将 len(p) 个字节读取到 p 中。它返回读取的字节数 n(0 <= n <= len(p))以及任何遇到的错误。

WriteAt 从 p 中将 len(p) 个字节写入到偏移量 off 处的基本数据流中。它返回从 p 中被写入的字节数 n(0 <= n <= len(p))以及任何遇到的引起写入提前停止的错误。若 WriteAt 返回的 n < len(p),它就必须返回一个 非nil 的错误。

转载于:https://www.cnblogs.com/vincenshen/p/9239133.html

你可能感兴趣的文章
实验七
查看>>
hdu1090
查看>>
[BZOJ1563][NOI2009]诗人小G(决策单调性优化DP)
查看>>
wikioi 1306 机智Trie树
查看>>
H5案例分享:移动端touch事件判断滑屏手势的方向
查看>>
互联网数据的挖掘和分析
查看>>
Juery Ajax语法
查看>>
斐波那契数 整理
查看>>
BZOJ.4453.cys就是要拿英魂!(后缀数组 单调栈)
查看>>
HDU.5385.The path(构造)
查看>>
HTML用JS导出Excel的五种方法
查看>>
.Net Core的Excel导入
查看>>
win8使用putty登录虚拟机linux
查看>>
sudo配置教程
查看>>
kali-rolling安装nessus 7并创建扫描任务教程
查看>>
我的浏览器不能在Web上阅读邮件,提示"脚本错误",怎么办?
查看>>
5月9日 练习:租房子
查看>>
Greenplum表定义
查看>>
从头开始基于Maven搭建SpringMVC+Mybatis项目(2)
查看>>
python读取excel文件
查看>>