Go语言的io输入输出流

news2024/9/20 16:52:22

Go语言的输入输出流不如其他语言那么直观,由于是通过实现接口方法的隐式继承所以比较抽象,今天具体介绍一下go语言的输入输出流。

go语言输入输出在io库中,使用Reader接口,如下:

type Reader interface {
    Read(p []byte) (n int, err error)
}

Read方法从流中读取长度为len(p)字节数据写入p。也就是使用Read方法可以将流读到p中,从而从流中到程序中。

当Read在读取n > 0个字节后遭遇错误或者到达文件结尾时,会返回读取的字节数。它可能会在该次调用返回一个非nil的错误,或者在下一次调用时返回0和该错误

io.Reader 是一个基本的接口,用于表示数据的读取。它只有一个方法 Read

io.ReadFull从 io.Reader 中精确读取 len(buf) 字节的数据。

Writer接口是写入流接口,如下:

type Writer interface {
    Write(p []byte) (n int, err error)
}

Write方法将len(p) 字节数据从p写入底层的数据流。

它会返回写入的字节数(0 <= n <= len(p))和遇到的任何导致写入提取结束的错误。Write必须返回非nil的错误,如果它返回的 n < len(p)。Write不能修改切片p中的数据,即使临时修改也不行。

io.Writer 是一个基本的接口,用于表示数据的写入。它只有一个方法 Write

io.WriteStringio.Writer 写入字符串。

流复制,从输出流复制到输出流,如下:

func Copy(dst Writer, src Reader) (written int64, err error)

上述只是输入输出流的基本用法,还有许多继承类,如下:

  • os.File 同时实现了 io.Reader 和 io.Writer
  • strings.Reader 实现了 io.Reader
  • bufio.Reader/Writer 分别实现了 io.Reader 和 io.Writer
  • bytes.Buffer 同时实现了 io.Reader 和 io.Writer
  • bytes.Reader 实现了 io.Reader
  • compress/gzip.Reader/Writer 分别实现了 io.Reader 和 io.Writer
  • crypto/cipher.StreamReader/StreamWriter 分别实现了 io.Reader 和 io.Writer
  • crypto/tls.Conn 同时实现了 io.Reader 和 io.Writer
  • encoding/csv.Reader/Writer 分别实现了 io.Reader 和 io.Writer
  • mime/multipart.Part 实现了 io.Reader
  • net/conn 分别实现了 io.Reader 和 io.Writer(Conn接口定义了Read/Write)

上述包和结构体都实现了io.Reader方法,因此都可以使用Read方法将流读取到程序中。

常用的类型有:os.File、strings.Reader、bufio.Reader/Writer、bytes.Buffer、bytes.Reader

在这里插入图片描述

可以看到直接获取字节流的ReadFile方法也是调用了Read方法,如下:

在这里插入图片描述

在strings的也存在Reader接口,看源码如下:

在这里插入图片描述

等等其他几个接口也是如此,在未被封装的时候都是调用Read方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows下用cmake编译腾讯云的对象存储COS的XML C++SDK

首先在腾讯云官网上下载sdk&#xff0c;网址及官方说明文档如下&#xff1a; 对象存储 快速入门-SDK 文档-文档中心-腾讯云 我下载解压之后的路径如下图&#xff1a; 下载完后就要编译了。 1.下载VS&#xff0c;我的开发环境是 visual studio 2019 2. 下载CMake&#xff…

UNRAID系统忘记密码解决办法

前言 unraid系统自己通过命令修改密码以后&#xff0c;怎么也进不去了。 这次带来如何重置密码 操作

1-2.Jetpack 之 Navigation 跳转编码模板

一、Navigation 1、Navigation 概述 Navigation 是 Jetpack 中的一个重要成员&#xff0c;它主要是结合导航图&#xff08;Navigation Graph&#xff09;来控制和简化 Fragment 之间的导航&#xff0c;即往哪里走&#xff0c;该怎么走 2、Navigate 引入 在模块级 build.gra…

《关节机械臂:智能仓库的高效助手》

关节机械臂作为一种高度精密的机器设备&#xff0c;在现代制造工厂的智能仓库系统中发挥着至关重要的作用。其设计初衷便是精准地模拟人类手臂在订单拣选操作中的各种运动&#xff0c;以实现高效、准确的物流作业。 这些多功能的机器人由多个关节巧妙组合而成&#xff0c;通常拥…

人工智能【AI】:未来的驱动力

在21世纪&#xff0c;人工智能&#xff08;AI&#xff09;已经成为推动技术进步和创新的关键力量。AI不仅仅是科幻小说中的概念&#xff0c;它已经渗透到我们日常生活的方方面面&#xff0c;从智能手机的语音助手到复杂的医疗诊断系统&#xff0c;AI的应用无处不在。 人工智能…

KG Structure as Prompt:利用知识图谱构建Prompt,提高大模型对因果关系的理解

KG Structure as Prompt&#xff1a;利用知识图谱构建Prompt&#xff0c;提高大模型对因果关系的理解 秒懂大纲提出背景解法拆解创意视角中文意译 论文&#xff1a;Knowledge Graph Structure as Prompt: Improving Small Language Models Capabilities for Knowledge-based Ca…

Mybatis框架映射---代码实现(XML配置以及注解形式)

目录 一. 映射关系 1 对 1-映射方式 1.通过xml文件实现映射的一对一关系 总结 &#xff1a; 2.通过注解的方式来实现下面的 1 对 1 的映射关系&#xff0c;实现级联查询 总结&#xff1a; 二. 映射关系多对一 1.通过xml文件实现映射的多对一关系 2.通过注解的方式来实现…

PHP发邮件教程:配置SMTP服务器发送邮件?

PHP发邮件的几种方式&#xff1f;如何使用PHP通过SMTP协议发信&#xff1f; PHP作为一种广泛使用的服务器端脚本语言&#xff0c;提供了多种方式来发送邮件。AokSend将详细介绍如何通过配置SMTP服务器来实现PHP发邮件教程的核心内容。 PHP发邮件教程&#xff1a;设置参数 这…

Qt 模型视图(一):概述

文章目录 Qt 模型视图(一):概述1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图(一):概述 ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会被自动…

PCIe扫盲(11)

系列文章目录 PCIe扫盲&#xff08;一&#xff09; PCIe扫盲&#xff08;二&#xff09; PCIe扫盲&#xff08;三&#xff09; PCIe扫盲&#xff08;四&#xff09; PCIe扫盲&#xff08;五&#xff09; PCIe扫盲&#xff08;六&#xff09; PCIe扫盲&#xff08;七&#xff09…

剪画:一带一路机遇下,自媒体如何跨越语言障碍!

随着国家 “一带一路” 的持续推进&#xff0c;我国的文化魅力如璀璨星辰&#xff0c;在世界舞台上熠熠生辉。美食的独特风味、华服的精美绝伦&#xff0c;越来越受到外国人的喜爱。这对于做自媒体的小伙伴们而言&#xff0c;无疑是一个巨大的机遇。 然而&#xff0c;机遇往往与…

利用Leaflet.js和turf.js创建交互式地图:航道路线绘制

引言 在现代Web应用中&#xff0c;地图的交互性是提供丰富用户体验的关键。Leaflet.js是一个轻量级的开源JavaScript库&#xff0c;它提供了简单易用的API来构建交云的地图。与此同时&#xff0c;turf.js作为一个强大的地理空间分析库&#xff0c;能够处理复杂的地理数据操作。…

Broadcast:Android中实现组件及进程间通信

目录 一&#xff0c;Broadcast和BroadcastReceiver 1&#xff0c;简介 2&#xff0c;广播使用 二&#xff0c;静态注册和动态注册 三&#xff0c;无序广播和有序广播 1&#xff0c;有序广播的使用 2&#xff0c;有序广播的截断 3&#xff0c;有序广播的信息传递 四&am…

AI产品经理面试100问,三天看完一周拿4个offer

AI产品经理面试100问 Attention(重点掌握) 1.什么是 Attention?为什么要用 Attention?它有什么作用? 2.Attention的流程是什么样的? 3.普通的Attention和Transformer的Self-attention之间有什么关系? 4.什么是Self-attention? Transformer(重点掌握) 1.Transformer是什…

[Linux]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…

在泰国旅游不会口语怎么办?求推荐翻译软件!!!

如果在泰国旅游时遇到语言障碍&#xff0c;可以采取以下措施&#xff1a;学习一些基础的泰语短语&#xff0c;使用翻译应用程序&#xff0c;携带翻译卡片&#xff0c;利用身体语言&#xff0c;参加有导游的旅行团&#xff0c;选择提供中文服务的酒店和旅行社&#xff0c;使用地…

【leetcode】字典 哈希表习题

1.两数之和&#xff08;查找表法-哈希表&#xff09; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次…

【人工智能学习笔记】7_智能语音技术基础

智能语音技术概述 智能语音技术通过对语音进行分析、理解和合成,是计算机设备实现“能听会说”、具备自然语音交流的技术能力。其涉及的范围主要有: 语音合成技术语音识别技术语音测评技术语音降噪与增强技术…智能语音技术的研究内容 智能语音技术的研究难点 智能语音技术…

旅行社区应该如何规划?

近年来&#xff0c;旅游行业逐渐恢复&#xff0c;包括微度假、精致露营、康养旅游、乡村民宿等旅游模式。用户旅游支出、旅游人次逐渐恢复&#xff0c;旅游收入仍待提升。 那么旅游社区应该如何搭建&#xff0c;内容如何规划呢&#xff1f; 我们了解到&#xff0c;很多旅游网…

哪个快?用300万个图斑测试ArcGIS Pro的成对叠加与经典叠加

​​​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 在使用ArcGIS Pro的过程中&#xff0c;很多朋友发现&#xff0c;Pro有个成对叠加工具集。很多…