go语言接口详解(go 接口)

技术Go语言中io包核心接口怎么用小编给大家分享一下Go语言中io包核心接口怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Readeri

边肖将与大家分享如何用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

(0)

相关推荐

  • 简述storm的拓扑结构(storm拓扑原理)

    技术storm怎么构建拓扑代码这篇文章主要讲解了“storm怎么构建拓扑代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“storm怎么构建拓扑代码”吧!1. 构建拓扑

    攻略 2021年12月23日
  • 怎么用linux批量上传文件到多台机器上

    技术怎么用linux批量上传文件到多台机器上这篇文章主要讲解了“怎么用linux批量上传文件到多台机器上”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用linux批量

    攻略 2021年11月30日
  • css中下划线样式怎么设置长度

    技术css中下划线样式怎么设置长度这篇文章主要介绍“css中下划线样式怎么设置长度”,在日常操作中,相信很多人在css中下划线样式怎么设置长度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年11月30日
  • mysql中如何进行数据压缩性能对比

    技术mysql中如何进行数据压缩性能对比这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 测试环境1.1 软硬件一台 64位 2

    攻略 2021年11月6日
  • KEGG Glycan 数据库的原理是什么

    技术KEGG Glycan 数据库的原理是什么这篇文章将为大家详细讲解有关KEGG Glycan 数据库的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。复合糖作

    攻略 2021年12月2日
  • 抖音刷播放,抖音刷多少播放可以上热门?

    技术抖音刷播放,抖音刷多少播放可以上热门?抖音的爆火引发了新的产业链的产生,点开百度输入关键词抖音上热门涨粉等等,就会出现很多的机构打着上热门,涨粉的这种幌子,制定出各种诱人的套餐,对抖音进行刷量,刷赞,换句话说只要你的

    测评 2021年11月11日