当前位置:首页 > 科技  > 软件

Golang 中的 Bufio 包详解之常用函数

来源: 责编: 时间:2023-10-18 09:18:11 398观看
导读Golang 中的 bufio 包是带缓冲 I/O 操作的标准库,之前的几篇文章详细讲解了 bufio.Reader、bufio.Writer 和 bufio.Scanner 这个几个结构体的使用方法、特性和使用场景,本文介绍一下 bufio 包中的函数。介绍常用函数之

lVT28资讯网——每日最新资讯28at.com

Golang 中的 bufio 包是带缓冲 I/O 操作的标准库,之前的几篇文章详细讲解了 bufio.Reader、bufio.Writer 和 bufio.Scanner 这个几个结构体的使用方法、特性和使用场景,本文介绍一下 bufio 包中的函数。lVT28资讯网——每日最新资讯28at.com

介绍常用函数之前,先简单介绍下另一个结构体类型和一个函数类型:bufio.ReadWriter 和 bufio.SplitFunc,对应的定义如下:lVT28资讯网——每日最新资讯28at.com

type ReadWriter struct {	*Reader	*Writer}type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)

ReadWriter 结构体实现了 io.ReadWriter 接口,SplitFunc 是用来指定自定义分割规则的函数类型,通常结合 bufio.Scanner 使用。lVT28资讯网——每日最新资讯28at.com

创建对象函数

  • func NewReader(rd io.Reader) *Reader,创建一个带缓冲的 Reader 对象。
  • func NewWriter(w io.Writer) *Writer,创建一个带缓冲的 Writer 对象。
  • func NewReadWriter(r *Reader, w *Writer) *ReadWriter,创建一个带缓冲的 ReadWriter 对象。
  • func NewReaderSize(rd io.Reader, size int) *Reader,创建一个带缓冲的 Reader 对象,使用 size 指定缓冲区的最小值。
  • func NewWriterSize(w io.Writer, size int) *Writer,创建一个带缓冲的 Writer 对象,使用 size 指定缓冲区的最小值。
  • func NewScanner(r io.Reader) *Scanner,创建一个带缓冲的 Scanner 对象。

SplitFunc 类型函数

以下几个函数都是 SplitFunc 类型,通常与 bufio.NewScanner 一起使用。lVT28资讯网——每日最新资讯28at.com

  • func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐行读取输入流中的数据。
  • func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐个字节读取输入流中的数据。
  • func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐个 unicode 编码读取输入流中的数据。
  • func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error),用于逐个单词(空格分割)读取输入流中的数据。

使用示例

package mainimport (	"bufio"	"fmt"	"os"	"strings")func main() {	// 确定读取文件的路径	path := "file.txt"	// 打开文件并处理错误	file, err := os.Open(path)	if err != nil {		panic(err)	}	defer file.Close()	// 创建Scanner类型对象	scanner := bufio.NewScanner(file)	// 设置分割函数	scanner.Split(bufio.ScanWords)	// 创建一个map对象,用于存储单词出现的次数	counts := make(map[string]int)	// 读取文件内容并统计单词出现次数	for scanner.Scan() {		word := strings.ToLower(scanner.Text())		counts[word]++	}	// 检查Scanner是否出错	if err := scanner.Err(); err != nil {		panic(err)	}	// 输出结果到控制台	for word, count := range counts {		fmt.Printf("%s: %d/n", word, count)	}	// 让用户根据输入的关键字进行筛选	fmt.Print("Enter keyword to filter results: ")	reader := bufio.NewReader(os.Stdin)	input, _ := reader.ReadString('/n')	keyword := strings.TrimSpace(input)	if keyword != "" {		for word, count := range counts {			if strings.Contains(word, keyword) {				fmt.Printf("%s: %d/n", word, count)			}		}	}}

首先创建了一个 Scanner 类型的对象,指定了 ScanWords 作为分隔函数,然后遍历文件内容,统计单词出现的次数并将结果存储到一个map中,最后让用户输入关键字进行筛选,根据关键字过滤并输出结果。lVT28资讯网——每日最新资讯28at.com

小结

bufio 是一个提供了带缓冲读写操作的包,通过使用 bufio 包提供的类型和方法,可以高效地读写数据,特别是当涉及到大量数据的读写时,可以大大提高程序的性能。lVT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13829-0.htmlGolang 中的 Bufio 包详解之常用函数

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 基于ArkTS的应用入场动画

下一篇: Spring Boot的自动配置原理及示例说明

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
Top