边肖将与大家分享如何用Go语言使用io包的核心接口。相信大部分人还不太了解,所以分享这篇文章给大家参考。希望你看完这篇文章会有很多收获。让我们一起来发现吧!
Reader
io。读取器接口定义了Read方法,用于将数据读入字节数组:
参数:字节数组p,将数据读入p。
返回值:这次读取的字节数n,以及遇到的错误err。
typeReaderinterface{
read(p[]字节)(nint,error)
}方法功能的详细说明
该方法读取数据并将其写入字节数组p。因为p有大小,所以它一次最多读取len(p)个字节。
该方法返回读取数据字节数n(0=n=len(p))和读取过程中遇到的错误。
即使一次调用读取的数据小于len(p),整个字节数组P也可以作为临时存储空间。
如果数据源的数据量小于len(p)字节,该方法将只读取当前可用的数据,而不会等待更多数据到达。
何时返回错误
成功读取n(n0)字节后,如果出现错误或到达文件结尾,此调用必须返回读取的字节数n,但是对于err的值,您可以选择返回err(err!=nil),或者返回err (n=0,err!=零).一个常见的例子是,在读取n个字节后,它到达文件的末尾(EOF)。此时,您可以返回err=EOF或err=nil,下一次调用将返回N=0和ERR=EOF。
呼叫者应该注意,在每次呼叫之后,如果n0,则应该在考虑err是否为零之前处理数据。因为前面一点已经指出,如果读取n0字节后遇到错误,就会同时返回n0和err!=nil,因此您需要在考虑err之前处理数据。
注意方法的实现和调用。
如果要实现这个方法,不建议同时返回n=0和err=nil,除非len(p)=0。
如果您调用此方法并返回n=0和err=nil,您可以认为什么都没有发生,而不是您已经读取了文件结尾
实现此方法后,请确保不要保存字节数组P(保留地址用于其他目的)
00-1010 io。Writer接口定义了将数据写入文件的写入方法。
参数:字节数组p,将p中的数据写入文件。
返回值:成功写入的字节数n和遇到的错误。
typeWriterinterface {
写(p[]字节)(nint,error)
}方法功能的详细说明
此方法将P中的数据写入文件。
方法返回成功写入的字节数n(0=n=len(p))和写入过程中遇到的错误。
如果nlen(p),方法必须返回err!=零
方法不能修改字节数组p,即使是临时修改也是不允许的。
注意方法的实施。
实现此方法后,重要的是不要保存字节数组P,而只读取数据。
Writer
io。Closer接口定义了Close方法,用于关闭连接。
注意方法的实施。
第一次调用此方法后,再次调用此方法时应该生成什么行为?此接口未定义,取决于实现方法。
typescloserinterface {
关闭()错误
}
Closer
io。导引头接口定义了Seek方法,用于指定下次读写时的偏移量。
参数:根据时的偏移偏移量,计算新偏移时的起始值。
返回
值:基于 whence 和 offset 计算后新的偏移量值,以及可能产生的错误
type Seeker interface { Seek(offset int64, whence int) (int64, error) }
方法功能详解
io包中定义了如下三种 whence
const ( SeekStart = 0 // 基于文件开始位置 SeekCurrent = 1 // 基于当前偏移量 SeekEnd = 2 // 基于文件结束位置 )
如果计算后新的偏移量,在文件起始位置之前,返回 error!=nil
任意正数的偏移量都是合法的,但是对数据源如何进行I/O操作,依赖具体的实现方法
组合接口
在go语言中,可以利用接口的组合,来囊括其他接口中的方法,类似于定义了一个父接口,可以包含多个子接口。如果一个 struct 实现了所有子接口的方法,也就相当于实现了父接口。小接口 + 接口组合的方式,很大程度上增加了程序的灵活性,在我们自己业务开发过程中,可以借鉴这种做法。
针对上面四个最小粒度的接口,io包定义了如下几种组合接口:
// ReadWriter 是 Read 和 Write 方法的组合 type ReadWriter interface { Reader Writer } // ReadCloser 是 Read 和 Close 方法的组合 type ReadCloser interface { Reader Closer } // WriteCloser 是 Write 和 Close 方法的组合 type WriteCloser interface { Writer Closer } // ReadWriteCloser 是 Read、Write 和 Close 方法的组合 type ReadWriteCloser interface { Reader Writer Closer } // ReadSeeker 是 Read 和 Seek 方法的组合 type ReadSeeker interface { Reader Seeker } // WriteSeeker 是 Write 和 Seek 方法的组合 type WriteSeeker interface { Writer Seeker } // ReadWriteSeeker 是 Read、Write 和 Seek 方法的组合 type ReadWriteSeeker interface { Reader Writer Seeker }
以上是“Go语言中io包核心接口怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148696.html