在线文档 > Golang练习 > 行过滤器
行过滤器是一种常见类型的程序,它从标准输入读取输入,对其进行处理,然后将某些派生结果打印到标准输出。grep
和 sed
是常见的行过滤器。
这里有一个Go中的示例行过滤器,它将所有输入文本的大写版本写入到标准输出中。你可以使用这个模式来编写你自己的Go行过滤器。
package main
import (
"bufio" // 引入bufio包以提供缓冲区扫描器
"fmt"
"os" // 引入os包以便访问标准输入和输出
"strings"
)
func main() {
// 将未缓冲的`os.Stdin`包装为带有缓冲区的扫描器,这使我们可以使用方便的`Scan`方法,该方法会将扫描器推进到下一个标记,也就是默认扫描器中的下一行。
scanner := bufio.NewScanner(os.Stdin)
// 循环扫描器进行扫描,直到输入已经扫描完毕。
for scanner.Scan() {
// `Text`方法返回当前标记,这里就是输入的下一行。
ucl := strings.ToUpper(scanner.Text())
// 将大写字母格式的行输出到标准输出。
fmt.Println(ucl)
}
// 判断`Scan`方法是否出错。文件结束符是预期的,`Scan`并不认为是错误。
if err := scanner.Err(); err != nil {
// 在标准错误流上打印错误信息。
fmt.Fprintln(os.Stderr, "error:", err)
// 退出程序并返回非零状态码。
os.Exit(1)
}
}
运行结果如下:
# 试一下我们的行过滤器,首先创建一个有小写行的文件。
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines
# 然后使用行过滤器来得到大写的行。
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER