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)

相关推荐

  • 分类算法的性能指标(分类算法常见的性能指标有)

    技术Classification算法指标是什么本篇内容介绍了“Classification算法指标是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年12月21日
  • 猪八戒照镜子,猪八戒照镜子的下一句是什么?

    技术猪八戒照镜子,猪八戒照镜子的下一句是什么?猪八戒照镜子——里外不是人 该歇后语的意思是猪八戒照镜子:形容一个人处于尴尬两难的境地,做什么事情都被人指责。 有关猪八戒的歇后语:
    1、猪八戒照镜子——里外不是人
    2

    生活 2021年10月24日
  • 怎么解决SQL中报错ORA-16038问题

    技术怎么解决SQL中报错ORA-16038问题这篇文章主要讲解了“怎么解决SQL中报错ORA-16038问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决SQL中

    攻略 2021年11月9日
  • CF1588F Jumping Through the Array

    技术CF1588F Jumping Through the Array CF1588F Jumping Through the ArrayCF1588F Jumping Through the Arra

    礼包 2021年11月15日
  • Java多线程中Callable、Future和FutureTask是什么意思

    技术Java多线程中Callable、Future和FutureTask是什么意思小编给大家分享一下Java多线程中Callable、Future和FutureTask是什么意思,相信大部分人都还不怎么了解,因此分享这篇

    攻略 2021年10月31日
  • 网络电视怎么调出频道,网络机顶盒怎么看电视频道

    技术网络电视怎么调出频道,网络机顶盒怎么看电视频道身边好多人买了网络机顶盒,但不知道怎么操作使用它来看电视直播网络电视怎么调出频道。下面我就以自家的电视盒子来教大家如何看直播的详细操作方法吧。1、打开电脑上的搜索当贝市场

    生活 2021年10月23日