Golang io 标准库使用分析

发布于:2024-10-24 编辑:匿名 来源:网络

前言 io 包提供了 I/O(输入输出,即输入输出)原语的基本接口。它的基本任务是包装这些原语的现有实现(例如 中的 os 包原语),使其成为共享的公共接口。

例如,Go语言标准库strings、bytes、bufio、os中,都有实现io.Reader的类型。本篇文章我们将通过IO库定义的接口一步步加深理解。

对于io库定义的接口,首先看IO库的代码,src/io/io.go。这里是所有io接口、基本接口和组合接口的定义。

不过请注意,这只是定义了接口语义,并不涉及接口的具体实现,我们会根据日常遇到的情况列出一些场景。这里我大致了解了这些接口之间的关系,如下图: io库接口定义图中的Reader、Writer、Closer、Seeker接口是基本接口,但是组合类型接口中的ReadWriter是在这些的基础上组合而成的匿名,然后还有一些独立的接口,比如ReaderFrom。

我们先来看看读者。 Reader 是一个包装了基本 Read 方法的接口。

Read 最多可以将 len (p) 个字节读入 p 中。它返回读取的字节数 (0<=n<=len (p)) 和遇到的任何错误。

代码语言:javascript copy type Reader 接口 { Read(p []byte) (n int, err error)}Writer 是一个包装了基本 Write 方法的接口。 Write 将 p 中的 len (p) 个字节写入底层数据流。

它返回从 p (0<=n<=len(p)) 写入的字节数,以及遇到的导致写入提前停止的任何错误。如果 Write 返回 n

bytes 和 bufio 包都有 Wirte 方法的实现。我稍后会发布图片。

我们可以根据列出的结构体来查看IO接口的具体实现方法。代码语言:javascript copy type Writer 接口 { Write(p []byte) (n int, err error)} 例如 ReadWriter 是一个组合类型接口。

它是使用匿名字段的 Reader 和 Writer 接口的组合。如果要实现ReadWriter接口,则必须同时实现Reader和Writer接口的方法。

代码语言:javascript复制类型 ReadWriter 接口 { Reader Writer } io接口的丰富实现。 Go基于io定义了哪些接口实现?你看我总结的图就知道了。

是不是很熟悉?原来字符串、字节、os都有很多。完成。

基于io接口的实现创建内存。 Readerbytes.NewReader 和 strings.NewReader 都可以包裹 []byte 或 string 并返回一个 Reader 代码语言,该代码语言实现了所有与读取相关的接口: javascript copy // bytes package func NewReader(b []byte) * Reader//strings package func NewReader(s string) *Reader在什么场景下使用?比如我们发送一个Post请求,其中body就是我们要发送的数据,是一个io.Reader。

代码语言: javascript copy func ( c *Client) Post(url string, bodyType string, body io.Reader) (resp *Response, err error)//字符串和字节调用 NewReaderhttp.Post(" "text/plain", strings.NewReader("stings test" ))http.Post(" "text/plain", bytes.NewReader([]byte("bytes test"))os.File 读取文件 Go 的 File 文件句柄(File 实际上是一个结构体),File结构体外部实现的接口,如Read、Write、ReadAt、WriteAt等。代码语言:javascript copy type File struct { *file // os Specific}type file struct { pfd poll.FD name string dirinfo *dirInfo // nil 除非正在读取目录 appendMode bool // 是否打开文件进行追加} 我们使用 os.Open 或 os.OpenFile 来获取 File 结构体的指针,然后读取打开文件的内容 例如: 代码。

语言:javascript复制文件,err:= os.Open("1.txt") if err != nil { return } //函数退出时,及时关闭文件句柄 defer file.Close() //Return *Reader reader := bufio.NewReader(file) // 读取换行符后终止 str,err := reader.ReadString('\n') //NewReader 函数 func NewReader(rd io.Reader) *Reader { return NewReaderSize(rd, defaultBufSize)} 是不是感觉很熟悉?来看看代码逻辑,首先获取File句柄。由于 File 实现了 IO.Reader 接口,因此 bufio.NewReader() 可以传递文件句柄并创建缓冲区(默认大小)。

bufio 实现了 ReadString 接口来读取缓冲区内容。 Go总结 io的核心是io库。

如果要实现接口,还是需要多阅读源码注释。除了定义的接口之外,io/ioutil提供的ReadFile和ReadAll函数也非常有用。

Golang io 标准库使用分析

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 通知:即日起,禁止携带Note 7登机,且不得作为航空货物托运或承运

    通知:即日起,禁止携带Note 7登机,且不得作为航空货物托运或承运

    中国民航局昨天发布公告,针对三星Galaxy Note 7手机出现的问题手机,为确保航空运输安全,自10月1日起,3月27日起,三星Galaxy Note 7手机不得携带登机,也不得托运。 具体规定为:旅客及船员严禁随身或手提行李中携带三星Galaxy Note 7手机;严禁将三星Galaxy Note 7手机放

    06-17

  • 李佳琦再次受到质疑,“全网最低价”谁说了算

    李佳琦再次受到质疑,“全网最低价”谁说了算

    双11的战线越来越长,促销方式越来越难懂,冲突也越来越早发生。 今年的商战是由京东发起的。 因花西子眉笔价格得罪网友后,李佳琦直播间再次陷入困境。 上次,一个新的货币计量单位“华西币”诞生了。 这一次,“全网最低价”应该被重新理解。 双11的“简单商战”,谁没说实

    06-21

  • 人造肉生产商v2food获3500万美元A轮融资

    人造肉生产商v2food获3500万美元A轮融资

    据投资界11月30日消息,澳大利亚植物性肉类替代品研发制造商v2food获3500万美元A轮融资,由联邦科学与工业研究组织 (Commonwealth Scientific and Industrial Research Organization) CSIRO 创新基金旗下资本部门 Main Sequence Ventures 出资,私人投资公司 Horizo??n Inve

    06-18

  • 广东设立半导体产业基金 规模110亿

    广东设立半导体产业基金 规模110亿

    天眼查App显示,近日,广东省半导体及集成电路产业股权投资基金二期合伙企业(有限合伙)成立,执行事务办公室为广东粤财基金管理有限公司。 公司投资额0.1亿元人民币,经营范围为私募股权基金从事股权投资、投资管理、资产管理等活动。 合伙人信息显示,该基金由广东粤财投资

    06-18

  • 沉浸式推理互动体验平台“戏剧侦探”获数百万天使融资,经纬中国投资

    沉浸式推理互动体验平台“戏剧侦探”获数百万天使融资,经纬中国投资

    据投资界5月15日消息,沉浸式推理互动体验平台“戏剧侦探”近日获得来自经纬中国的投资。 经纬中国天使轮融资100万元。 本轮融资主要用于产品研发、内容生态建设和团队建设。   剧探本质上是一个“内容+社交”的互动平台,构建强大的社交场景,用脚本驱动场景化社交。 目前

    06-18

  • 路透社:半导体集团 ASMI 预计 2022 年下半年营收增加

    路透社:半导体集团 ASMI 预计 2022 年下半年营收增加

    据路透社报道,荷兰半导体供应商 ASM International (ASMI) 周二预测 2022 年下半年营收增加,因为预计上半年供应链问题将持续存在。 ASMI 在一份声明中表示:“根据目前的情况,我们预计下半年的收入将高于上半年。 ”英特尔和应用材料等半导体集团受到供应链挑战的打击,尽

    06-08

  • 西瓜视频已与BBC、Discovery达成内容合作,独家播出纪录片《哈勃三十年》

    西瓜视频已与BBC、Discovery达成内容合作,独家播出纪录片《哈勃三十年》

    纪录片将成为西瓜视频内容布局的另一重点。 4月22日,西瓜视频与BBC Studios宣布达成内容合作。 双方将共同制作两部新纪录片:《哈勃三十年:揭示宇宙奇观》和《灵长王国》。 同时,BBC将为西瓜视频提供数百部纪录片内容。 西瓜视频还携手另一部纪录片《发现巨头》。 西瓜视频

    06-18

  • 看亚洲之星:现代KOL开创了赢得和影响客户的新方式

    看亚洲之星:现代KOL开创了赢得和影响客户的新方式

    2016年,杭言浩回到家乡马来西亚槟城岛,亲眼目睹了年轻人如何依靠互联网追名逐利,财富,甚至能够靠它谋生。 在互联网上,任何人都可以成为明星15分钟——只需要一段成功的TikTok(抖音海外版)视频。 “然而,真正的影响力是明确自己的独特性,并为他人提供宝贵的知识和经

    06-18

  • 中期协:今年第一季度我国期货市场成交额同比增长83.08%

    中期协:今年第一季度我国期货市场成交额同比增长83.08%

    中国中期协会:今年一季度,我国期货市场成交量同比增长83.08%。 今年一季度,我国期货市场累计交易量18.49亿手,累计成交额0.36万亿元,同比分别增长69.86%和83.08%。 %。 其中,钢材、化工品、油脂、能源等期货品种交易量同比快速增长。 数据还显示,今年3月份全国期货市场

    06-18

  • 据美通社报道,生物科技公司Adcentrx Therapeutics于4月29日宣布完成由剑桥资本

    据美通社报道,生物科技公司Adcentrx Therapeutics于4月29日宣布完成由剑桥资本

    投资社区(ID:pedaily)领投的5000万美元A轮融资,重点关注突破性抗体偶联药物(“Adcentrx”) ADC旗下生物科技公司Therapeutics(“Adcentrx”)宣布完成1万美元A轮融资。 本轮融资由康桥资本领投,博裕资本旗下早期投资平台万物资本跟投。 此次融资将加速Adcentrx在ADC领

    06-18

  • 【话题互动获奖名单&精选点评】开源大模型如何帮助创业项目打造竞争力?

    【话题互动获奖名单&精选点评】开源大模型如何帮助创业项目打造竞争力?

    亲爱的参与者,感谢您参与我们的互动话题“开源大模型如何帮助创业项目打造竞争力?”在这次活动中收到的许多热情的回应和观点给我们带来了启发。 再次感谢您的支持和参与,期待在以后的活动中见到您!这些是本主题讨论中精选的评论。 我们深感荣幸并衷心感谢大家的热情分享。

    06-17

  • 全景影像技术研发公司Insta360获数亿元C+轮融资,拟在A股上市

    全景影像技术研发公司Insta360获数亿元C+轮融资,拟在A股上市

    据投资界3月20日消息,全景影像科技研发公司Insta获得数亿元C+轮融资。 本轮投资方包括迈高控股、华金资本、浪美创投等。 本轮资金将用于产品研发、营销和渠道拓展,提升品牌影响力。 此前,Insta曾于今年3月获得迅雷网络、启明创投、IDG投资的数亿元B轮融资,并于同年7月获得

    06-17