Go 示例: 行过滤器

行过滤器是一种常见的程序类型,它从标准输入读取数据,对其进行处理,然后将一些派生结果输出到标准输出。grepsed 是常见的行过滤器。

以下是一个 Go 中的示例行过滤器,它将所有输入文本写入大写版本。您可以使用此模式编写自己的 Go 行过滤器。

package main
import (
    "bufio"
    "fmt"
    "os"
    "strings"
)
func main() {

将无缓冲的 os.Stdin 包装在一个缓冲的扫描器中,为我们提供了一个方便的 Scan 方法,该方法将扫描器推进到下一个标记;在默认扫描器中,下一个标记是下一行。

    scanner := bufio.NewScanner(os.Stdin)

Text 返回当前标记,这里是从输入读取的下一行。

    for scanner.Scan() {
        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

下一个示例:文件路径.