让我们深入探索名为“阅读文件、写入文件、Go 中的行过滤器”的令人兴奋的文件操作世界。
full lessons here👇:
https://programmerscareer.com/zh-cn/golang-basic-skill/
由AI生成,可能有错误,仅供参考
1.1 Go 文件操作简介
Go 是一门简单高效的语言,它对文件操作也具有相似的特点。Go 提供了多个包,例如“os”包,可以执行各种文件操作,这些操作包括文件创建、读写文件等。需要注意的是,这些操作通常需要正确地处理错误,以管理潜在的问题。
Go 是一门非常适合与文件进行交互的语言,因为它对输入/输出操作的支持非常强。例如,让我们来看一下如何在 Go 中打开一个文件:
1 | package main |
在这个示例中,我们尝试打开一个名为“test.txt”的文件。os.Open
函数尝试打开文件并返回两个值:文件指针和错误变量。然后,我们检查是否存在打开文件时的错误。如果存在错误,我们使用 log.Fatal
输出错误消息并停止程序。
1.2 Go 读取文件
Go 提供了多种方法来读取文件,例如 os
和 ioutil
包。下面是一些常见的方法:
- ioutil.Readfile:这是一个简单的方法,可以一次性读取整个文件。它需要最少的代码,使其实现起来非常简单。
1 | content, err := ioutil.ReadFile("test.txt") |
- os.File.Read:这个方法允许您控制要读取文件的部分,这对于大文件来说非常有用。
1 | file, err := os.Open("test.txt") |
- bufio.Scanner:这个方法可以帮助您读取文件的每一行。
1 | scanner := bufio.NewScanner(file) |
1.3 Go 文件写入
Go 提供了多种方法来写入文件,例如 os
和 bufio
包。下面是一些常见的方法:
- os.File.Write:这个方法可以将数据写入文件。
1 | file, err := os.Create("test.txt") |
- bufio.Writer:这个方法可以帮助您将数据写入文件。
1 | writer := bufio.NewWriter(file) |
1.4 Go 文件错误处理
在工作中,文件操作总是伴随着错误的存在。文件可能不存在、无法打开、权限不足等原因都可能会出现错误。因此,在执行文件操作时,需要有一个robust 的错误处理机制。
Go 中,错误是值,可以像其他类型一样对待。错误是函数和方法返回的结果,我们通常检查函数返回的错误。如果存在错误,我们可以使用 log.Fatal
输出错误消息并停止程序。
例如,让我们来看一下如何在 Go 中打开一个文件时处理错误:
1 | file, err := os.Open("non_existent_file.txt") |
在这个示例中,如果文件“non_existent_file.txt”不存在,os.Open
将返回一个错误,我们捕捉并输出错误消息。
Topic: 1.5 Line Filters 的介绍
Line filters 是 UNIX 中的一种常见的程序。它们从标准输入读取数据,处理它,然后将结果发送到标准输出。
在 Go 中,这可以轻松地设置使用 os.Stdin
和 bufio
包。下面是一个简单的 line filter 示例:
1 | scanner := bufio.NewScanner(os.Stdin) |
这个程序将标准输入转换为大写字母。我们创建一个新的 Scanner(在前面的课程中介绍过),它将默认扫描标准输入。
我们使用循环来 Scan()
,这将给我们每一行文本输入。对于每一行被扫描,我们将其转换为大写字母,并将其打印出来。fmt.Println 将自动添加一个换行符(\n)。
如果在扫描过程中出现任何错误,我们将捕捉它们并将其打印到 os.Stderr,然后退出程序并返回状态码 1。
要测试它,请运行这个程序,并输入一些文本,查看程序输出的结果是大写字母。
Topic: 1.6 使用 Golang 构建 Line Filters
太好了,让我们更深入地探讨如何使用 bufio 包在 Go 中构建强大的 line filters,以便对每一行数据进行分离和处理。
Line filters 本质上是一种程序,它们从标准输入读取数据,按行处理,然后将结果发送到标准输出。
让我们编写一个将输入转换为小写字母的 line filter。Go 提供了在整个字符串中将其转换为小写或大写的便捷函数,在其 strings
包中。
一旦设置了扫描器,代码将遵循线程 filter 程序的模式。
下面是一个将输入转换为小写字母的 line filter 示例:
1 | package main |
这个 line filter 从标准输入读取数据,将其转换为小写字母,然后将结果发送到标准输出。
运行它,并注意它将将所有输入文本从标准输入转换为小写字母。尝试输入一些文本!
记住,Go 的 bufio 包提供了创建强大、可靠的 line filters 的所有工具,可以处理数据效率高地读取和写入每一行。
Topic: 1.7 实践练习
这些练习与 Go 中的文件读写相关。
Review Topics:
我们讨论了文件操作,如读写到文件,然后讨论了使用 bufio 包在 Go 中构建 line filters,这允许我们对标准输入和输出进行数据处理。
Assessment:
理论问题:
- a) 什么是 line filter,何时有用?
- b) 哪个 Go 包帮助我们创建 line filters,并从中使用哪些函数?
- c) 如何在 Go 中处理文件操作中的错误?
实践问题:
- a) 写一个将输入文本转换为 Pig Latin 的 line filter。
- b) 写一个 Go 程序,它读取 CSV 文件,读取数据,然后将其写入到新的 CSV 文件中,以反向顺序。
- c) 写一个 Go 程序,它读取文本文件,并计算每个单词在文本文件中的出现次数。
我鼓励你花些时间来完成这些问题。
English post: https://programmerscareer.com/go-basic-08/
作者:Wesley Wei – Twitter Wesley Wei – Medium
注意:本文为作者原创,转载请注明出处。
评论