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)

相关推荐

  • 数据库中Oracle DB2随取几行的示例分析

    技术数据库中Oracle DB2随取几行的示例分析小编给大家分享一下数据库中Oracle DB2随取几行的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们

    攻略 2021年11月20日
  • 阅读笔记:程序员修炼之道4

    技术阅读笔记:程序员修炼之道4 阅读笔记:程序员修炼之道4让你的用户参与权衡通常你是为别人编写软件。你常常需要记得从他们那里获取需求2﹒们你是否常t他们、他们想要他们的软件有多好有时候选择并不存在:如果

    礼包 2021年11月29日
  • 同心协力的协是什么意思,同心协力的协是什么意思

    技术同心协力的协是什么意思,同心协力的协是什么意思“协”的意思是同心协力的协是什么意思:共同 同心协力 【解释】团结一致,共同努力。 【出自】汉·贾谊《过秦论》:“且天下尝同心并力攻秦矣,然困于险阻而不能进者,岂勇力智慧

    生活 2021年10月25日
  • 如何进行nmap主机的使用

    技术如何进行nmap主机的使用如何进行nmap主机的使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们来看下如何使用nmapping 扫描选项参数 -s

    攻略 2021年12月9日
  • 聚焦近义词,“均匀”的近义词是什么

    技术聚焦近义词,“均匀”的近义词是什么jūn yún[释义] (形)分布或分配在各部分的数量相同聚焦近义词,时间的间隔相等。
    均匀的近义词
    近义词:平均、恰当、匀和、匀称、均匀
    一、平均 píngjūn
    (1) 按份儿均

    生活 2021年10月30日
  • 抖音刷粉咋弄,抖音刷粉怎么操作

    技术抖音刷粉咋弄,抖音刷粉怎么操作抖音的玩法如此之多,其中最常见的一段视频的镜头切换是如何做的呢?点击进入抖音后点击“我”,然后再点击“作品”即可看到,目前,抖音内部只能查看自己的视频播放量,也只能在自己主页上的作品栏上

    测评 2021年10月19日