当前位置: 代码网 > it编程>前端脚本>Golang > Go语言的io输入输出流方式

Go语言的io输入输出流方式

2024年11月03日 Golang 我要评论
go语言的io输入输出流go语言的输入输出流不如其他语言那么直观,由于是通过实现接口方法的隐式继承所以比较抽象,今天具体介绍一下go语言的输入输出流。go语言输入输出在io库中使用reader接口,如

go语言的io输入输出流

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方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • Go语言中的通道chan使用指南

    Go语言中的通道chan使用指南

    go 语言的通道(chan)是实现并发编程的核心工具之一,它为 goroutine 之间的通信提供了一种简单而高效的方式。在这篇文章中,我们将深入探讨通道的使用... [阅读全文]
  • Go语言实现支付宝支付与退款详解

    Go语言实现支付宝支付与退款详解

    在当今数字支付的时代,移动支付已经成为各行各业的主流选择。支付宝作为中国最大的支付平台之一,提供了丰富的支付和退款api,供开发者集成到各种应用中。上期我已经介... [阅读全文]
  • GO语言中ni,零值与空结构体的使用

    GO语言中ni,零值与空结构体的使用

    go语言的初学者,特别是java开发者新学习go语言,对于一些和java类似但是又有差异的概念很容易混淆,比如说go中的零值,nil 和 空结构体。本文就来详细... [阅读全文]
  • Go语言中的网络编程实现方式

    Go语言中的网络编程实现方式

    引言go语言作为一种简洁而强大的编程语言,在网络编程方面表现尤为出色。其内置的net包提供了丰富的网络i/o基础设施,支持tcp、udp协议,以及dns解析等功... [阅读全文]
  • Go语言Seeker接口与文件断点续传实战教程

    seeker接口在现代软件开发中,高效的输入输出(i/o)操作是提高程序性能的关键之一。特别是在处理大量数据时,i/o操作的效率直接影响到应用程序的响应速度和用户体验。go语言标准…

    2024年11月03日 前端脚本
  • Go语言内建函数len的使用

    Go语言内建函数len的使用

    在 go 语言中,len 是一个非常常用的内建函数,它用于获取各种数据类型的长度或大小。掌握 len 的使用方法,可以帮助我们更高效地处理数据结构。本文将详细介... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com