iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go中Writer和Reader接口的使用入门
  • 208
分享到

Go中Writer和Reader接口的使用入门

2024-04-02 19:04:59 208人浏览 泡泡鱼
摘要

目录引言Writer 接口Reader 接口总结引言 我们学习其他语言编程时,会学到一个 io 包,这个包可以以流的方式高效处理数据,而不用考虑数据是什么,数据来自哪里,以及数据要发

引言

我们学习其他语言编程时,会学到一个 io 包,这个包可以以流的方式高效处理数据,而不用考虑数据是什么,数据来自哪里,以及数据要发送到哪里的问题。

io 是一个 golang 标准库包,它为围绕输入和输出的许多操作和用例定义了灵活的接口。

io 包参见:Golang.org/pkg/io/

与 stdout 和 stdin 对应,Go 语言实现了 io.Writerio.Reader 两个接口。通过实现这两个接口,其他接口都可以使用 io 包提供的所有功能,也可以用于其他包里接收着两个接口的函数以及方法。

Go 还提供了名为 bufioioutil 的包,其中包含与使用这些接口相关的有用功能。

Writer 接口

io.Writer 接口是 Go 非常小的接口之一。它只有一种方法。写入方法。 Go 标准库中的许多包都使用 io.Writer 接口,它表示将字节切片写入数据流的能力。更一般地,允许您将数据写入实现 io.Writer 接口的东西。io.Writer 接口的声明如下:

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

这个接口声明了唯一一个方法 Writer,这个方法接收一个 byte 切片,并返回一个写入的字节数 n 和 error 错误值。

这里会有两个点需要注意:

  • Writer 从 p 字节切片的数据流写入 len(p) 字节的数据。这个方法返回从 p 里写出的字节数(0 <= n <= len(p) ),以及任何可能导致写入提起结束的错误。
  • Writer 在返回 n < len(p) 的时候,必须返回某个 nil 值的 error。Writer 绝不能改写切片里的数据,也不能临时修改。

现在来看一个例子,看在 Go 中将数据写入文件时如何使用 io.Writer

package main

import (
	"fmt"
	"os"
)

func main() {

	f, err := os.OpenFile("hello.txt", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600)
	if err != nil {
		panic(err)
	}
	defer f.Close()

	n, err := f.Write([]byte("Hello, My name is LeeLei!"))
	if err != nil {
		panic(err)
	}
	fmt.Printf("wrote %d bytes", n)
}

运行结果:wrote 25 bytes, 同时我们可以查看 hello.txt 文件内容:

os.File 的 Read 确实是同一个 io.Writer 接口的实现,用于将字节切片写入底层文件的数据流。这是 os.File.Write 的定义:

func (f *File) Write(b []byte) (n int, err error)

Reader 接口

然后来看一下 Reader 接口的声明:

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

Reader 是一个带有强抽象的小接口!那个抽象到底是什么? Read 方法的想法是它表示从某个源读取数据字节,以便我们可以在代码中使用这些字节。该来源可能是文件、相机、网络连接,或者只是一个普通的旧字符串。例如,如果我们从文件中读取数据,我们将使用的 io.Reader*os.File

io.Reader 接口声明了一个方法 Read,这个方法同样接受一个 byte 切片,返回两个值。第一个值是读入的字节数,第二个值是 error 错误值。

  • p []byte 是我们传递给 Read 方法的字节切片。 Reader 将从其数据源(如文件)读取的数据复制到该字节片。
  • 返回的 n int 告诉我们在这个 Read 调用中读取了多少字节。
  • 返回的 err error 是读取数据时可能发生的任何错误,例如到达文件末尾。

让我们用一个文件来尝试一下,看看我们是如何使用它的。复制此文本并将其保存到名为 hello.txt 的新目录中的文件中:

Hello, My name is LeeLei!

现在,让我们编写一些 Go 代码来使用 File 的 Read 方法读取它。复制此代码并将其保存到与 hello.txt 位于同一目录中的文件 main.go 中:

package main

import (
	"log"
	"os"
)

func main() {
	file, err := os.OpenFile("hello.txt", os.O_RDWR|os.O_CREATE|os.O_RDONLY, 0600)
	if err != nil {
		log.Fatalf("error opening hello.txt: %v", err)
	}
	defer file.Close()

	// Make a byte slice that's big enough to store a few Words of the message
	// we're reading
	bytesRead := make([]byte, 33)

	// Now read some data, passing in our byte slice
	n, err := file.Read(bytesRead)
	if err != nil {
		log.Fatalf("error reading from hello.txt: %v", err)
	}

	// Take a look at the bytes we copied into the byte slice
	log.Printf("We read \"%s\" into bytesRead (%d bytes)",
		string(bytesRead), n)
}

运行该代码:go run main.go,然后可以看到如下输出:

$ go run main.go     
2022/04/18 22:56:29 We read "Hello, My name is LeeLei!" into bytesRead (25 bytes)

那么当我们调用 os.File.Read 时,Go 会从文件中读取数据,并将其复制到 bytesRead 中,由于没有发生错误,因此返回的错误为 nil。我们将 bytesRead 切片传递给 Read 函数,就像我们将杯子传递给汽水喷泉一样!

总结

本篇文章简单介绍了 Go 语言 io 包中的两个很实用的接口:Writer 和 Reader,分别给出了这两个接口的声明和解释,然后以一个简单的例子在代码中使用这两个小巧的接口,但是 Go 语言设计这两个接口的用法远远不止这些,也需要我们不断去探索其他功能,甚至学有余力去理解 Go 这样的设计的原理。

到此这篇关于Go中Writer和Reader接口的使用入门的文章就介绍到这了,更多相关Go Writer和Reader接口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go中Writer和Reader接口的使用入门

本文链接: https://www.lsjlt.com/news/146615.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go中Writer和Reader接口的使用入门
    目录引言Writer 接口Reader 接口总结引言 我们学习其他语言编程时,会学到一个 io 包,这个包可以以流的方式高效处理数据,而不用考虑数据是什么,数据来自哪里,以及数据要发...
    99+
    2022-11-13
  • GO语言中接口和接口型函数的具体使用
    目录前言GO语言中的接口怎么用?使用函数类型实现接口有何好处?GO源码例子前言 今天在编码中,看到了一个非常经典的接口用法如下,于是查阅了相关资料,发现此种写法为接口型函数,本文对此...
    99+
    2023-03-09
    GO语言接口 GO语言接口型函数
  • 掌握Go和Django接口文件的基础知识:从入门到实践。
    掌握Go和Django接口文件的基础知识:从入门到实践 随着互联网的发展,Web应用的需求越来越大,而应用程序之间的数据交互也变得越来越重要。接口文件的开发就成为了不可避免的一步。本文将为大家介绍如何掌握Go和Django接口文件的基础知识...
    99+
    2023-08-25
    django 接口 文件
  • GO语言中接口和接口型函数如何使用
    这篇文章主要讲解了“GO语言中接口和接口型函数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中接口和接口型函数如何使用”吧!// A Getter&nbs...
    99+
    2023-07-05
  • Go语言中的接口怎么使用
    今天小编给大家分享一下Go语言中的接口怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。接口在 Go 语言中,接口是一种...
    99+
    2023-07-04
  • Go语言中如何使用NumPy和Git接口?
    Go语言是一种高效、简洁、安全的编程语言,它在开发Web应用、云计算、网络通信等方面有着广泛的应用。而NumPy和Git则是两个非常流行的工具,分别用于科学计算和版本控制。本文将介绍如何在Go语言中使用NumPy和Git接口,以便更好地进行...
    99+
    2023-07-01
    numy git 接口
  • Go 的入口函数和包初始化的使用
    目录包 packagemain.main 函数:Go 应用的入口函数package main注意其他包也可以拥有 main 函数或方法重点引子init 函数:Go 包的初始化函数和 ...
    99+
    2022-11-13
  • 从入门到精通:Python API接口在Linux开发中的应用!
    Python是一种高级编程语言,简单易学,可读性强。Python的生态系统非常强大,有很多的第三方库和模块,可以满足各种需求。在Linux开发中,Python API接口的应用越来越广泛。本文将从Python API接口的基础知识讲起,介...
    99+
    2023-10-29
    linux api 接口
  • 如何在 JavaScript 中使用 Go 的数组接口?
    在本文中,我们将探讨如何在 JavaScript 中使用 Go 的数组接口。Go 是一种强类型、静态编译语言,其数组接口非常实用。尽管 JavaScript 是一种动态类型的解释性语言,但通过一些技巧和技术,我们可以利用 Go 的数组接口...
    99+
    2023-07-01
    数组 javascript 接口
  • 如何使用Go和Django创建可靠的接口文件?
    Go和Django是两种非常流行的编程语言,它们都有着各自独特的优点。在本文中,我们将探讨如何使用这两种语言来创建可靠的接口文件。 一、Go语言 Go语言是由谷歌公司开发的一种开源编程语言,它具有以下特点: 简单易学:Go语言的语法非常...
    99+
    2023-08-25
    django 接口 文件
  • 如何使用Go语言编写NumPy和Git接口的API?
    随着数据科学和机器学习的发展,NumPy和Git成为了数据科学家和开发人员日常工作中不可或缺的工具。在本文中,我们将介绍如何使用Go语言编写NumPy和Git接口的API,并提供一些演示代码。 一、NumPy接口 NumPy是一个用于Py...
    99+
    2023-07-01
    numy git 接口
  • 如何在Django中使用GO语言编写的接口?
    Django 是一个优秀的 Python Web 框架,它提供了丰富的功能和强大的扩展性,使得我们可以方便地构建高性能、高效、安全的 Web 应用程序。然而,随着互联网技术的发展,越来越多的 Web 应用程序需要与其他语言编写的服务进行交互...
    99+
    2023-10-26
    ide django 接口
  • 一文带你了解Go语言中接口的使用
    目录接口接口的实现接口类型变量空接口类型断言类型断言变种 type switch小结接口 在 Go 语言中,接口是一种抽象的类型,是一组方法的集合。接口存在的目的是定义规范,而规范的...
    99+
    2022-12-08
    Go语言接口使用 Go语言接口 Go 接口
  • Django和Spring的接口开发,你有考虑过使用Go吗?
    Django和Spring是很流行的Web框架,它们提供了强大的功能和易用的API,使得开发人员能够快速构建Web应用程序。但是,在接口开发中,你有考虑过使用Go吗? Go是一种非常流行的编程语言,它被广泛用于Web应用程序和云计算。Go有...
    99+
    2023-08-29
    django 接口 spring
  • 一文带你入门Go语言中定时任务库Cron的使用
    目录前言快速开始安装导入DemoCron表达式格式标准格式预定义时间表常用的方法介绍new()AddJob()AddFunc()Start()相关推荐Go第三方库之cronexpr&...
    99+
    2022-11-11
  • Java中SimpleDateFormat类和List接口的使用
    本篇内容主要讲解“Java中SimpleDateFormat类和List接口的使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中SimpleDateFormat类和List接口的使用”...
    99+
    2023-06-15
  • NumPy和Git接口在Go语言中的应用实例有哪些?
    NumPy和Git是两个非常流行的工具,它们在不同的领域中都有着广泛的应用。在这篇文章中,我们将探讨NumPy和Git接口在Go语言中的应用实例。 一、NumPy接口在Go语言中的应用实例 NumPy是Python中一个非常流行的数学库,它...
    99+
    2023-07-01
    numy git 接口
  • 使用Go和Laravel创建对象接口的最佳实践是什么?
    随着互联网的发展,Web应用程序的需求越来越多。Web应用程序的构建需要用到多种技术,其中API是其中之一。API是应用程序接口的缩写,是一种用于软件之间交互的方式。API可以让开发者创建出自己的软件,使其可以访问其他软件的功能。在本文中...
    99+
    2023-08-27
    laravel 对象 接口
  • 你曾经尝试过在 JavaScript 中使用 Go 的数组接口吗?
    你曾经尝试过在 JavaScript 中使用 Go 的数组接口吗? JavaScript 和 Go 是两种不同的编程语言,但它们都有一个共同的特点:数组。在 JavaScript 中,数组是一种非常重要的数据结构,它可以用来存储一组数据,并...
    99+
    2023-07-01
    数组 javascript 接口
  • Django中的接口编程:如何使用Go语言实现算法?
    Django是一个强大的Web框架,它提供了许多功能和工具来简化Web应用程序的开发过程。其中,接口编程是Django的一个重要特性,它可以让我们轻松地与其他系统和服务进行交互。在本文中,我们将介绍如何使用Go语言实现Django中的接口编...
    99+
    2023-08-18
    编程算法 接口 django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作