Go bufio库
2024-08-30 02:06:27
bufio.Scanner
bufio
包使处理输入和输出方便又高效。Scanner
类型是该包最有用的特性之一,它读取输入并将其拆成行或单词;通常是处理行形式的输入最简单的方法。该变量从程序的标准输入中读取内容。每次调用input.Scanner
,即读入下一行,并移除行末的换行符;读取的内容可以调用input.Text()
得到。Scan
函数在读到一行时返回true
,在无输入时返回false
。
使用DEMO:
func main(){
scanner:=bufio.NewScanner(
strings.NewReader("ABCDEFG\nHIJKELM"),
)
for scanner.Scan(){
fmt.Println(scanner.Text()) // scanner.Bytes()
}
}
理解:对于Scanner.Scan方法,相当于其他语言的迭代器iterator,并把迭代器指向的数据存放到新的缓冲区里。新的缓冲区(token)可以通过scanner.Text()或者scanner.Bytes()获取到。
Scanner.Scan方法默认是以换行符\n
,作为分隔符。如果你想指定分隔符,Go语言提供了四种方法,ScanBytes(返回单个字节作为一个 token
), ScanLines(返回一行文本
), ScanRunes(返回单个 UTF-8 编码的 rune 作为一个 token
)和ScanWords(返回通过“空格”分词的单词
)。 使用方式:
func main(){
scanner:=bufio.NewScanner(
strings.NewReader("ABCDEFG\nHIJKELM"),
)
scanner.Split(ScanWords/*四种方式之一,你也可以自定义, 实现SplitFunc方法*/)
for scanner.Scan(){
fmt.Println(scanner.Text()) // scanner.Bytes()
}
}
结论:我们一般在读取数据到缓冲区时,且想要采用分隔符分隔数据流时,我们一般使用bufio.Scanner数据结构,而不使用bufio.Reader。
NewScanner 和 NewReader 读取文件内容
newScanner读取文件
func printFile(filename string) {
file, err := os.Open(filename)
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println("scanner", scanner.Text())
}
}
newReader读取文件
func printFile (filename string) {
file, err := os.Open(filename)
defer file.Close()
if err != nil {
panic(err)
}
reader := bufio.NewReader(file)
for {
line, _, err := reader.ReadLine()
if err != nil || err == io.EOF {
break
} else {
fmt.Printf("the line content is : %s\n", line)
}
}
}
最新文章
- iOS学习之Table View的简单使用
- 【Python3】SMTP发送邮件
- hdu4639Hehe
- PHPCMS标签:PC标签模板语法规则
- ESCAPE用法
- iOS 之 WebView 简单使用
- PHP的性能优化方法总结
- ubuntu 装机必备
- webstorm主要快捷键
- mysql主从脚本
- appium+java(四)微信公众号自动化测试实践
- 各种initcall的执行先后顺序(module_init、postcore_initcall、arch_initcall、subsys_initcall、 fs_initcall)【转】
- [转]mysqldump备份还原和mysqldump导入导出语句大全详解
- BI Admin Tools和目录管理器的连接配置
- 使用 urllib 分析 Robots 协议
- UI 交互
- Imageview如何设置背景颜色
- Linux 下 SSH 远程超时解决方案
- linux 下库的深入调研
- nodeJS学习(5) --- sublime Text3 安装使用
热门文章
- java 接口转码、加密
- C++中计算矩阵的行列式
- poj 1515+poj 1438(边双连通)
- &;quot;围观&;quot;设计模式(7)--创建型之单例模式(Singleton Pattern)
- java随手记
- 清空javascript数组数据
- 七、Dockerfile案例一(jdk1.8安装)
- jquery,日常 记录知识 点 (选择器的引用类型)
- 巨蟒django之CRM3 添加和编辑客户&;&;公户和私户的展示和转换
- QChart 如何放大缩小?