前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go-标准库-io

Go-标准库-io

原创
作者头像
堕落飞鸟
发布2023-04-21 14:35:01
2230
发布2023-04-21 14:35:01
举报
文章被收录于专栏:飞鸟的专栏

概述

在 Go 语言中,标准库中的 io 包提供了对输入和输出流进行读写的接口和实现。这个包中的接口和实现可以被用于许多场景,比如网络编程、文件处理和内存操作等。在本篇文章中,我们将会详细介绍 io 包的接口和实现,并给出一些使用示例。

接口

io 包中定义了两个主要的接口:Reader 和 Writer。它们分别代表了从数据源读取数据和向目标位置写入数据的能力。

Reader 接口定义了一个 Read 方法,它的作用是从数据源读取数据并将其填充到指定的字节数组中。这个方法返回读取的字节数和一个错误值,当没有更多的数据可供读取时,它会返回 io.EOF 错误。下面是 Reader 接口的定义:

代码语言:javascript
复制
type Reader interface {
    Read(p []byte) (n int, err error)
}

Writer 接口定义了一个 Write 方法,它的作用是向目标位置写入数据。这个方法接受一个字节数组作为参数,并返回写入的字节数和一个错误值。下面是 Writer 接口的定义:

代码语言:javascript
复制
type Writer interface {
    Write(p []byte) (n int, err error)
}

实现

在 io 包中,有许多结构体实现了 Reader 和 Writer 接口。下面我们将介绍其中的一些。

io.Reader 和 io.Writer

io 包中的 Reader 和 Writer 实现了最基本的读取和写入功能,它们分别从标准输入和标准输出中读取和写入数据。下面是它们的定义:

代码语言:javascript
复制
var (
    Stdin  io.Reader = NewFile(0, "/dev/stdin")
    Stdout io.Writer = NewFile(1, "/dev/stdout")
    Stderr io.Writer = NewFile(2, "/dev/stderr")
)

可以使用 fmt 包中的 Fprint 和 Fscan 等函数,使用它们从标准输入和标准输出中读写数据。

bytes.Buffer

bytes.Buffer 是一个实现了 io.Reader 和 io.Writer 接口的缓存结构体。使用它可以将数据写入到缓存中,然后从缓存中读取数据。下面是 bytes.Buffer 的定义:

代码语言:javascript
复制
type Buffer struct {
    buf      []byte
    off      int
    lastRead readOp
}

使用 bytes.Buffer 可以进行如下操作:

写入数据:

代码语言:javascript
复制
buf := bytes.NewBuffer(nil)
buf.WriteString("Hello, ")
buf.WriteString("world!")
fmt.Println(buf.String())

输出:Hello, world!

读取数据:

代码语言:javascript
复制
buf := bytes.NewBufferString("Hello, world!")
data := make([]byte, 5)
n, err := buf.Read(data)
fmt.Println(string(data[:n]), n, err)

输出:Hello 5 <nil>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 实现
    • io.Reader 和 io.Writer
      • bytes.Buffer
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档